表结构信息查询

--sql server 2000
SELECT
    表名      
= case when a.colorder=1 then d.name else '' end,
    表说明    
= case when a.colorder=1 then isnull(f.value,'') else '' end,
    字段序号  
= a.colorder,
    字段名    
= a.name,
    标识      
= case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then ''else '' end,
    主键      
= case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in (
                    
SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then '' else '' end,
    类型      
= b.name,
    占用字节数
= a.length,
    长度      
= COLUMNPROPERTY(a.id,a.name,'PRECISION'),
    小数位数  
= isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),
    允许空    
= case when a.isnullable=1 then ''else '' end,
    默认值    
= isnull(e.text,''),
    字段说明  
= isnull(g.[value],'')
FROM
    syscolumns a
left join
    systypes b
on
    a.xusertype
=b.xusertype
inner join
    sysobjects d
on
    a.id
=d.id  and d.xtype='U' and  d.name<>'dtproperties'
left join
    syscomments e
on
    a.cdefault
=e.id
left join
    sysproperties g
on
    a.id
=g.id and a.colid=g.smallid 
left join
    sysproperties f
on
    d.id
=f.id and f.smallid=0
where
    d.name
='要查询的表'    --如果只查询指定表,加上此条件
order by
    a.id,a.colorder

/*
表名    表说明 字段序号 字段名    标识 主键    类型    占用字节数 长度 小数位数 允许空  默认值      字段说明
------- ----- -------  -------- ---- ------- ------ ------- --------------- ------ ---------- ----------
authors       1        au_id          √     id      11     11      0                         
              2        au_lname              varchar 40     40      0                         
              3        au_fname              varchar 20     20      0                         
              4        phone                 char    12     12      0              ('UNKNOWN')
              5        address               varchar 40     40      0       √                
              6        city                  varchar 20     20      0       √                
              7        state                 char    2      2       0       √                
              8        zip                   char    5      5       0       √                
              9        contract              bit     1      1       0                         
(所影响的行数为 9 行)
*/
--sql server 2005
--
1. 表结构信息查询
--
========================================================================
--
表结构信息查询
--
邹建 2005.08(引用请保留此信息)
--
========================================================================
SELECT
    TableName
=CASE WHEN C.column_id=1 THEN O.name ELSE N'' END,
    TableDesc
=ISNULL(CASE WHEN C.column_id=1 THEN PTB.[value] END,N''),
    Column_id
=C.column_id,
    ColumnName
=C.name,
    PrimaryKey
=ISNULL(IDX.PrimaryKey,N''),
   
[IDENTITY]=CASE WHEN C.is_identity=1 THEN N''ELSE N'' END,
    Computed
=CASE WHEN C.is_computed=1 THEN N''ELSE N'' END,
    Type
=T.name,
    Length
=C.max_length,
   
Precision=C.precision,
    Scale
=C.scale,
    NullAble
=CASE WHEN C.is_nullable=1 THEN N''ELSE N'' END,
   
[Default]=ISNULL(D.definition,N''),
    ColumnDesc
=ISNULL(PFD.[value],N''),
    IndexName
=ISNULL(IDX.IndexName,N''),
    IndexSort
=ISNULL(IDX.Sort,N''),
    Create_Date
=O.Create_Date,
    Modify_Date
=O.Modify_date
FROM sys.columns C
   
INNER JOIN sys.objects O
       
ON C.[object_id]=O.[object_id]
           
AND O.type='U'
           
AND O.is_ms_shipped=0
   
INNER JOIN sys.types T
       
ON C.user_type_id=T.user_type_id
   
LEFT JOIN sys.default_constraints D
       
ON C.[object_id]=D.parent_object_id
           
AND C.column_id=D.parent_column_id
           
AND C.default_object_id=D.[object_id]
   
LEFT JOIN sys.extended_properties PFD
       
ON PFD.class=1
           
AND C.[object_id]=PFD.major_id
           
AND C.column_id=PFD.minor_id
--             AND PFD.name='Caption'  -- 字段说明对应的描述名称(一个字段可以添加多个不同name的描述)
    LEFT JOIN sys.extended_properties PTB
       
ON PTB.class=1
           
AND PTB.minor_id=0
           
AND C.[object_id]=PTB.major_id
--             AND PFD.name='Caption'  -- 表说明对应的描述名称(一个表可以添加多个不同name的描述)
    LEFT JOIN                       -- 索引及主键信息
    (
       
SELECT
            IDXC.
[object_id],
            IDXC.column_id,
            Sort
=CASE INDEXKEY_PROPERTY(IDXC.[object_id],IDXC.index_id,IDXC.index_column_id,'IsDescending')
               
WHEN 1 THEN 'DESC' WHEN 0 THEN 'ASC' ELSE '' END,
            PrimaryKey
=CASE WHEN IDX.is_primary_key=1 THEN N''ELSE N'' END,
            IndexName
=IDX.Name
       
FROM sys.indexes IDX
       
INNER JOIN sys.index_columns IDXC
           
ON IDX.[object_id]=IDXC.[object_id]
               
AND IDX.index_id=IDXC.index_id
       
LEFT JOIN sys.key_constraints KC
           
ON IDX.[object_id]=KC.[parent_object_id]
               
AND IDX.index_id=KC.unique_index_id
       
INNER JOIN  -- 对于一个列包含多个索引的情况,只显示第1个索引信息
        (
           
SELECT [object_id], Column_id, index_id=MIN(index_id)
           
FROM sys.index_columns
           
GROUP BY [object_id], Column_id
        ) IDXCUQ
           
ON IDXC.[object_id]=IDXCUQ.[object_id]
               
AND IDXC.Column_id=IDXCUQ.Column_id
               
AND IDXC.index_id=IDXCUQ.index_id
    ) IDX
       
ON C.[object_id]=IDX.[object_id]
           
AND C.column_id=IDX.column_id
-- WHERE O.name=N'要查询的表'       -- 如果只查询指定表,加上此条件
ORDER BY O.name,C.column_id

-- 2. 索引及主键信息
--
========================================================================
--
索引及主键信息
--
邹建 2005.08(引用请保留此信息)
--
========================================================================
SELECT
    TableId
=O.[object_id],
    TableName
=O.Name,
    IndexId
=ISNULL(KC.[object_id],IDX.index_id),
    IndexName
=IDX.Name,
    IndexType
=ISNULL(KC.type_desc,'Index'),
    Index_Column_id
=IDXC.index_column_id,
    ColumnID
=C.Column_id,
    ColumnName
=C.Name,
    Sort
=CASE INDEXKEY_PROPERTY(IDXC.[object_id],IDXC.index_id,IDXC.index_column_id,'IsDescending')
       
WHEN 1 THEN 'DESC' WHEN 0 THEN 'ASC' ELSE '' END,
    PrimaryKey
=CASE WHEN IDX.is_primary_key=1 THEN N''ELSE N'' END,
   
[UQIQUE]=CASE WHEN IDX.is_unique=1 THEN N''ELSE N'' END,
    Ignore_dup_key
=CASE WHEN IDX.ignore_dup_key=1 THEN N''ELSE N'' END,
    Disabled
=CASE WHEN IDX.is_disabled=1 THEN N''ELSE N'' END,
    Fill_factor
=IDX.fill_factor,
    Padded
=CASE WHEN IDX.is_padded=1 THEN N''ELSE N'' END
FROM sys.indexes IDX
   
INNER JOIN sys.index_columns IDXC
       
ON IDX.[object_id]=IDXC.[object_id]
           
AND IDX.index_id=IDXC.index_id
   
LEFT JOIN sys.key_constraints KC
       
ON IDX.[object_id]=KC.[parent_object_id]
           
AND IDX.index_id=KC.unique_index_id
   
INNER JOIN sys.objects O
       
ON O.[object_id]=IDX.[object_id]
   
INNER JOIN sys.columns C
       
ON O.[object_id]=C.[object_id]
           
AND O.type='U'
           
AND O.is_ms_shipped=0
           
AND IDXC.Column_id=C.Column_id
--    INNER JOIN  -- 对于一个列包含多个索引的情况,只显示第1个索引信息
--
    (
--
        SELECT [object_id], Column_id, index_id=MIN(index_id)
--
        FROM sys.index_columns
--
        GROUP BY [object_id], Column_id
--
    ) IDXCUQ
--
        ON IDXC.[object_id]=IDXCUQ.[object_id]
--
            AND IDXC.Column_id=IDXCUQ.Column_id

--  主键.外键.约束.视图.函数.存储过程.触发器

SELECT DISTINCT o.xtype, 

    CASE o.xtype WHEN 'X' THEN '扩展存储过程' WHEN 'TR' THEN '触发器'

       WHEN 'PK' THEN '主键' WHEN 'F' THEN '外键' WHEN 'C' THEN '约束'

       WHEN 'V' THEN '视图' WHEN 'FN' THEN '函数-标量' WHEN 'IF'

       THEN '函数-内嵌' WHEN 'TF' THEN '函数-表值' ELSE '存储过程' 

    END AS 类型,

    o.name AS 对象名,

    o.crdate AS 创建时间,

    o.refdate AS 更改时间, 

    c.text AS 声明语句 

FROM dbo.sysobjects o

    LEFT OUTER JOIN dbo.syscomments c

       ON o.id = c.id 

WHERE (o.xtype IN ('X', 'TR', 'C', 'V', 'F', 'IF', 'TF', 'FN', 'P', 'PK'))

    AND (OBJECTPROPERTY(o.id, N'IsMSShipped') = 0) 

ORDER BY o.xtype

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值