sql server 获取数据库表的字段和字段属性源码

--select name from PlatFormEF.sys.tables  --获取某个数据中的所有表
SELECT d.name AS TableName,  
    A.ColOrder,
    A.Name AS ColName,
    (CASE WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity')=1 THEN 1 ELSE 0 END) IsIdentity,
    (CASE WHEN (
                SELECT COUNT(1) 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 1 ELSE 0 END) IsKey,
    B.Name AS ColDataType,                                          -- 数据类型
    A.Length AS Bytes,                                              -- 占用存储空间
    COLUMNPROPERTY(a.id,a.name,'PRECISION') AS Length,              -- 字符串长度
    ISNULL(COLUMNPROPERTY(a.id, a.name,'Scale'),0) AS ScaleSize,    -- 小数位数
    A.IsNullable,                                                   -- 允许空
    ISNULL(e.text,'') AS DefaultValue,
    ISNULL(g.[value], ' ') AS Remark
FROM  SYSCOLUMNS A
LEFT JOIN SYSTYPES B ON a.xtype=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 SYS.EXTENDED_PROPERTIES G ON a.id=g.major_id AND a.colid=g.minor_id
LEFT JOIN SYS.EXTENDED_PROPERTIES F ON d.id=f.class and f.minor_id=0
WHERE B.NAME IS NOT NULL
--WHERE d.name='要查询的表' --如果只查询指定表,加上此条件
ORDER BY A.id, a.ColOrder

posted @ 2018-04-13 16:06  纪末  阅读(189)  评论(0编辑  收藏  举报