使用SQL语句查询表及表字段类型说明

今天突然遇到有人要数据库表及表字段说明,数据库表太多又不能一个个表去找,就想想SQL是否能直接查询出来。

经过查询资料,加上一些自己的一些调整写了一个sql语句,在此记录一下,以方便日后查找使用。

SELECT  ( CASE WHEN a.colorder = 1 THEN d.name
               ELSE ''
          END ) N'表名' ,
        ( CASE WHEN a.colorder = 1
               THEN ISNULL(( SELECT TOP 1 value FROM   sys.extended_properties WHERE  major_id = OBJECT_ID(d.name) ), '')
               ELSE ''
          END ) N'表说明' ,
        a.colorder N'字段序号' ,
        a.name N'字段名' ,
        ( CASE WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN '√'
               ELSE ''
          END ) N'标识' ,
        ( CASE WHEN ( SELECT    COUNT(*)
                      FROM      sysobjects
                      WHERE     name IN (
                                SELECT  name
                                FROM    sysindexes
                                WHERE   id = a.id
                                        AND indid IN (
                                        SELECT  indid
                                        FROM    sysindexkeys
                                        WHERE   id = a.id
                                                AND colid IN ( SELECT  colid FROM syscolumns WHERE id = a.id AND name = a.name ) 
										) 
								)
                                AND xtype = 'PK'
                    ) > 0 THEN '√'
               ELSE ''
          END ) N'主键' ,
        b.name N'类型' ,
        a.length N'占用字节数' ,
        COLUMNPROPERTY(a.id, a.name, 'PRECISION') AS N'长度' ,
        ISNULL(COLUMNPROPERTY(a.id, a.name, 'Scale'), 0) AS N'小数位数' ,
        ( CASE WHEN a.isnullable = 1 THEN '√'
               ELSE ''
          END ) N'允许空' ,
        ISNULL(e.text, '') N'默认值' ,
        ISNULL(g.[value], '') AS N'字段说明'
FROM    sys.syscolumns a
        LEFT JOIN sys.systypes b ON a.xtype = b.xusertype
        INNER JOIN sys.sysobjects d ON a.id = d.id
                                       AND d.xtype = 'U'
                                       AND d.name <> 'dtproperties'
        LEFT JOIN sys.syscomments e ON a.cdefault = e.id
        LEFT JOIN sys.extended_properties g ON a.id = g.major_id
                                               AND a.colid = g.minor_id
ORDER BY OBJECT_NAME(a.id) ,
        a.colorder; 

  

猜你喜欢

转载自www.cnblogs.com/wsk198726/p/10730361.html