获取SQLServer的最完整数据字典的SQL语句

获取SQLServer的最完整数据字典的SQL语句
 
其实网上已经流传了很多关于获取SQLServer的数据字典的版本,不过我相信这个应该是最全的了,本语句包括了表、字段、字段类型、字段长度、是否为空、是否递增字段、索引名称、索引的定位、索引类型、主键、外键等;通过合理的裁剪可以很方便的生成相应的数据字典。

  SELECT 
sysobjects.name AS 表名称,
--sysproperties.[value] AS 表说明,
syscolumns.name AS 字段名称,
--properties.[value] AS 字段说明,
systypes.name AS 字段类型,
syscolumns.length AS 字段长度,
ISNULL(COLUMNPROPERTY(syscolumns.id,  syscolumns.name,'Scale'), 0) AS 小数位数,
                                                                                                                                      CASE WHEN syscolumns.isnullable=0

THEN ''
ELSE '√'
END AS 是否为空,
CASE WHEN syscomments.text IS NULL

THEN '' ELSE syscomments.text
END AS 缺省值,
CASE WHEN COLUMNPROPERTY(syscolumns.id,  syscolumns.name, 'IsIdentity')= 1

THEN '√' ELSE ''
END AS 递增字段,
CASE WHEN sysindexes.name IS NULL

THEN ''
ELSE sysindexes.name
END AS 索引名称,
CASE WHEN sysindexkeys.keyno IS NULL

THEN ''
ELSE  CONVERT(VARCHAR(10),sysindexkeys.keyno )
END AS 索引位置,
CASE WHEN sysindexes.indid=1

THEN '聚集索引'
WHEN sysindexes.indid>1 AND sysindexes.indid<>255

THEN '非聚集索引'
WHEN sysindexes.indid IS NULL

THEN ''
ELSE

'其他'
END AS 索引类型,
CASE WHEN EXISTS
(SELECT 1

FROM sysobjects

WHERE xtype = 'PK' AND name IN

(SELECT name

FROM sysindexes

WHERE indid IN

(SELECT indid

FROM sysindexkeys

WHERE id = syscolumns.id AND colid = syscolumns.colid)))

THEN '√' ELSE ''
END AS 主键,
CASE WHEN sysforeignkeys.constid IS NULL

THEN ''
ELSE '√'
END AS 外健
FROM syscolumns
--数据表字段
INNER JOIN sysobjects

--数据对象

ON sysobjects.id = syscolumns.id
INNER JOIN systypes
--数据类型

ON syscolumns.xtype = systypes.xtype
LEFT OUTER JOIN sysproperties  properties
--字段属性信息

ON syscolumns.id = properties.id

AND syscolumns.colid = properties.smallid
LEFT OUTER JOIN sysproperties
--表属性信息

ON sysobjects.id = sysproperties.id

AND sysproperties.smallid = 0
LEFT OUTER JOIN syscomments
--注释信息

ON syscolumns.cdefault = syscomments.id
LEFT OUTER JOIN sysindexkeys
--索引中的键或列的信息

ON sysindexkeys.id = syscolumns.id

AND sysindexkeys.colid = syscolumns.colid
LEFT OUTER JOIN sysindexes
--数据库索引表

ON sysindexes.id = sysindexkeys.id

AND sysindexes.indid = sysindexkeys.indid
LEFT OUTER JOIN sysforeignkeys

ON sysforeignkeys.fkeyid = syscolumns.id

AND sysforeignkeys.fkey = syscolumns.colid
WHERE (sysobjects.xtype = 'U')
order by sysobjects.id,syscolumns.colid

posted on 2008-08-13 19:48  hwei2004  阅读(152)  评论(0)    收藏  举报

导航