網(wǎng)上有很多SQL SERVER數(shù)據(jù)庫(kù)字典的SQL語(yǔ)句,七零八落,我在工作整理了一下思路,總結(jié)SQL代碼如下,只在SQLSERVER2000中測(cè)試通過(guò),希望對(duì)大家有幫助。
1. SqlServer數(shù)據(jù)庫(kù)字典--表結(jié)構(gòu).sql SELECT TOP 100 PERCENT --a.id, CASE WHEN a.colorder = 1 THEN d.name ELSE '' END AS 表名, CASE WHEN a.colorder = 1 THEN isnull(f.value, '') ELSE '' END AS 表說(shuō)明, a.colorder AS 字段序號(hào), a.name AS 字段名, CASE WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN '√' ELSE '' END AS 標(biāo)識(shí), CASE WHEN EXISTS (SELECT 1 FROM dbo.sysindexes si INNER JOIN dbo.sysindexkeys sik ON si.id = sik.id AND si.indid = sik.indid INNER JOIN dbo.syscolumns sc ON sc.id = sik.id AND sc.colid = sik.colid INNER JOIN dbo.sysobjects so ON so.name = so.name AND so.xtype = 'PK' WHERE sc.id = a.id AND sc.colid = a.colid) THEN '√' ELSE '' END AS 主鍵, b.name AS 類型, a.length AS 長(zhǎng)度, COLUMNPROPERTY(a.id, a.name, 'PRECISION') AS 精度, ISNULL(COLUMNPROPERTY(a.id, a.name, 'Scale'), 0) AS 小數(shù)位數(shù), CASE WHEN a.isnullable = 1 THEN '√' ELSE '' END AS 允許空, ISNULL(e.text, '') AS 默認(rèn)值, ISNULL(g.[value], '') AS 字段說(shuō)明, d.crdate AS 創(chuàng)建時(shí)間, CASE WHEN a.colorder = 1 THEN d.refdate ELSE NULL END AS 更改時(shí)間 FROM dbo.syscolumns a LEFT OUTER JOIN dbo.systypes b ON a.xtype = b.xusertype INNER JOIN dbo.sysobjects d ON a.id = d.id AND d.xtype = 'U' AND d.status >= 0 LEFT OUTER JOIN dbo.syscomments e ON a.cdefault = e.id LEFT OUTER JOIN dbo.sysproperties g ON a.id = g.id AND a.colid = g.smallid LEFT OUTER JOIN dbo.sysproperties f ON d.id = f.id AND f.smallid = 0 ORDER BY d.name, a.colorder 2. SqlServer數(shù)據(jù)庫(kù)字典--索引.sql SELECT TOP 100 PERCENT --a.id, CASE WHEN b.keyno = 1 THEN c.name ELSE '' END AS 表名, CASE WHEN b.keyno = 1 THEN a.name ELSE '' END AS 索引名稱, d.name AS 列名, b.keyno AS 索引順序, CASE indexkey_property(c.id, b.indid, b.keyno, 'isdescending') WHEN 1 THEN '降序' WHEN 0 THEN '升序' END AS 排序, CASE WHEN p.id IS NULL THEN '' ELSE '√' END AS 主鍵, CASE INDEXPROPERTY(c.id, a.name, 'IsClustered') WHEN 1 THEN '√' WHEN 0 THEN '' END AS 聚集, CASE INDEXPROPERTY(c.id, a.name, 'IsUnique') WHEN 1 THEN '√' WHEN 0 THEN '' END AS 唯一, CASE WHEN e.id IS NULL THEN '' ELSE '√' END AS 唯一約束, a.OrigFillFactor AS 填充因子, c.crdate AS 創(chuàng)建時(shí)間, c.refdate AS 更改時(shí)間 FROM dbo.sysindexes a INNER JOIN dbo.sysindexkeys b ON a.id = b.id AND a.indid = b.indid INNER JOIN dbo.syscolumns d ON b.id = d.id AND b.colid = d.colid INNER JOIN dbo.sysobjects c ON a.id = c.id AND c.xtype = 'U' LEFT OUTER JOIN dbo.sysobjects e ON e.name = a.name AND e.xtype = 'UQ' LEFT OUTER JOIN dbo.sysobjects p ON p.name = a.name AND p.xtype = 'PK' WHERE (OBJECTPROPERTY(a.id, N'IsUserTable') = 1) AND (OBJECTPROPERTY(a.id, N'IsMSShipped') = 0) AND (INDEXPROPERTY(a.id, a.name, 'IsAutoStatistics') = 0) ORDER BY c.name, a.name, b.keyno 3. SqlServer數(shù)據(jù)庫(kù)字典--主鍵.外鍵.約束.視圖.函數(shù).存儲(chǔ)過(guò)程.觸發(fā)器.sql SELECT DISTINCT TOP 100 PERCENT o.xtype, CASE o.xtype WHEN 'X' THEN '擴(kuò)展存儲(chǔ)過(guò)程' WHEN 'TR' THEN '觸發(fā)器' WHEN 'PK' THEN '主鍵' WHEN 'F' THEN '外鍵' WHEN 'C' THEN '約束' WHEN 'V' THEN '視圖' WHEN 'FN' THEN '函數(shù)-標(biāo)量' WHEN 'IF' THEN '函數(shù)-內(nèi)嵌' WHEN 'TF' THEN '函數(shù)-表值' ELSE '存儲(chǔ)過(guò)程' END AS 類型, o.name AS 對(duì)象名, o.crdate AS 創(chuàng)建時(shí)間, o.refdate AS 更改時(shí)間, c.text AS 聲明語(yǔ)句 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 CASE o.xtype WHEN 'X' THEN '擴(kuò)展存儲(chǔ)過(guò)程' WHEN 'TR' THEN '觸發(fā)器' WHEN 'PK' THEN '主鍵' WHEN 'F' THEN '外鍵' WHEN 'C' THEN '約束' WHEN 'V' THEN '視圖' WHEN 'FN' THEN '函數(shù)-標(biāo)量' WHEN 'IF' THEN '函數(shù)-內(nèi)嵌' WHEN 'TF' THEN '函數(shù)-表值' ELSE '存儲(chǔ)過(guò)程' END DESC
|