利用三个SQL视图查出所有SQL Server数据库字典

数据库 SQL Server
本文主要介绍了使用三个SQL视图来查询SQL Server数据库字典的SQL语句,希望能够对您有所帮助。

我们知道,数据库字典包括表结构、索引和主键、外键、约束、视图、函数、存储过程、触发器和规则。本文我们总结了三个SQL视图来查询数据字典的SQL语句示例,利用它可以直接了当地查出SQL2K及SQL2005的所有数据字典,方便文档的编写,希望对大家有帮助。

1. SQL Server数据库字典--表结构.sql

 

  1. SELECT TOP 100 PERCENT --a.id,  
  2.  
  3. CASE WHEN a.colorder = 1 THEN d.name ELSE '' END AS 表名,  
  4.  
  5. CASE WHEN a.colorder = 1 THEN isnull(f.value, '') ELSE '' END AS 表说明,  
  6.  
  7. a.colorder AS 字段序号, a.name AS 字段名, CASE WHEN COLUMNPROPERTY(a.id,  
  8.  
  9. a.name, 'IsIdentity') = 1 THEN '√' ELSE '' END AS 标识,  
  10.  
  11. CASE WHEN EXISTS  
  12.  
  13. (SELECT 1  
  14.  
  15. FROM dbo.sysindexes si INNER JOIN  
  16.  
  17. dbo.sysindexkeys sik ON si.id = sik.id AND si.indid = sik.indid INNER JOIN  
  18.  
  19. dbo.syscolumns sc ON sc.id = sik.id AND sc.colid = sik.colid INNER JOIN  
  20.  
  21. dbo.sysobjects so ON so.name = si.name AND so.xtype = 'PK' 
  22.  
  23. WHERE sc.id = a.id AND sc.colid = a.colid) THEN '√' ELSE '' END AS 主键,  
  24.  
  25. b.name AS 类型, a.length AS 长度, COLUMNPROPERTY(a.id, a.name, 'PRECISION')  
  26.  
  27. AS 精度, ISNULL(COLUMNPROPERTY(a.id, a.name, 'Scale'), 0) AS 小数位数,  
  28.  
  29. CASE WHEN a.isnullable = 1 THEN '√' ELSE '' END AS 允许空, ISNULL(e.text, '')  
  30.  
  31. AS 默认值, ISNULL(g.[value], '') AS 字段说明, d.crdate AS 创建时间,  
  32.  
  33. CASE WHEN a.colorder = 1 THEN d.refdate ELSE NULL END AS 更改时间  
  34.  
  35. FROM dbo.syscolumns a LEFT OUTER JOIN  
  36.  
  37. dbo.systypes b ON a.xtype = b.xusertype INNER JOIN  
  38.  
  39. dbo.sysobjects d ON a.id = d.id AND d.xtype = 'U' AND  
  40.  
  41. d.status >= 0 LEFT OUTER JOIN  
  42.  
  43. dbo.syscomments e ON a.cdefault = e.id LEFT OUTER JOIN  
  44.  
  45. dbo.sysproperties g ON a.id = g.id AND a.colid = g.smallid AND  
  46.  
  47. g.name = 'MS_Description' LEFT OUTER JOIN  
  48.  
  49. dbo.sysproperties f ON d.id = f.id AND f.smallid = 0 AND  
  50.  
  51. f.name = 'MS_Description' 
  52.  
  53. ORDER BY d.name, a.colorder  
  54.  
  55. SqlServer2005数据库字典--表结构.sql  
  56.  
  57. SELECT TOP 100 PERCENT --a.id,  
  58.  
  59. CASE WHEN a.colorder = 1 THEN d.name ELSE '' END AS 表名,  
  60.  
  61. CASE WHEN a.colorder = 1 THEN isnull(f.value, '') ELSE '' END AS 表说明,  
  62.  
  63. a.colorder AS 字段序号, a.name AS 字段名, CASE WHEN COLUMNPROPERTY(a.id,  
  64.  
  65. a.name, 'IsIdentity') = 1 THEN '√' ELSE '' END AS 标识,  
  66.  
  67. CASE WHEN EXISTS  
  68.  
  69. (SELECT 1  
  70.  
  71. FROM dbo.sysindexes si INNER JOIN  
  72.  
  73. dbo.sysindexkeys sik ON si.id = sik.id AND si.indid = sik.indid INNER JOIN  
  74.  
  75. dbo.syscolumns sc ON sc.id = sik.id AND sc.colid = sik.colid INNER JOIN  
  76.  
  77. dbo.sysobjects so ON so.name = si.name AND so.xtype = 'PK' 
  78.  
  79. WHERE sc.id = a.id AND sc.colid = a.colid) THEN '√' ELSE '' END AS 主键,  
  80.  
  81. b.name AS 类型, a.length AS 长度, COLUMNPROPERTY(a.id, a.name, 'PRECISION')  
  82.  
  83. AS 精度, ISNULL(COLUMNPROPERTY(a.id, a.name, 'Scale'), 0) AS 小数位数,  
  84.  
  85. CASE WHEN a.isnullable = 1 THEN '√' ELSE '' END AS 允许空, ISNULL(e.text, '')  
  86.  
  87. AS 默认值, ISNULL(g.[value], '') AS 字段说明, d.crdate AS 创建时间,  
  88.  
  89. CASE WHEN a.colorder = 1 THEN d.refdate ELSE NULL END AS 更改时间  
  90.  
  91. FROM dbo.syscolumns a LEFT OUTER JOIN  
  92.  
  93. dbo.systypes b ON a.xtype = b.xusertype INNER JOIN  
  94.  
  95. dbo.sysobjects d ON a.id = d.id AND d.xtype = 'U' AND  
  96.  
  97. d.status >= 0 LEFT OUTER JOIN  
  98.  
  99. dbo.syscomments e ON a.cdefault = e.id LEFT OUTER JOIN  
  100.  
  101. sys.extended_properties g ON a.id = g.major_id AND a.colid = g.minor_id AND  
  102.  
  103. g.name = 'MS_Description' LEFT OUTER JOIN  
  104.  
  105. sys.extended_properties f ON d.id = f.major_id AND f.minor_id = 0 AND  
  106.  
  107. f.name = 'MS_Description' 
  108.  
  109. ORDER BY d.name, 字段序号 

 

2. SQL Server数据库字典--索引.sql

 

  1. SELECT TOP 100 PERCENT --a.id,  
  2.  
  3. CASE WHEN b.keyno = 1 THEN c.name ELSE '' END AS 表名,  
  4.  
  5. CASE WHEN b.keyno = 1 THEN a.name ELSE '' END AS 索引名称, d.name AS 列名,  
  6.  
  7. b.keyno AS 索引顺序, CASE indexkey_property(c.id, b.indid, b.keyno, 'isdescending')  
  8.  
  9. WHEN 1 THEN '降序' WHEN 0 THEN '升序' END AS 排序, CASE WHEN p.id IS NULL  
  10.  
  11. THEN '' ELSE '√' END AS 主键, CASE INDEXPROPERTY(c.id, a.name, 'IsClustered')  
  12.  
  13. WHEN 1 THEN '√' WHEN 0 THEN '' END AS 聚集, CASE INDEXPROPERTY(c.id,  
  14.  
  15. a.name, 'IsUnique') WHEN 1 THEN '√' WHEN 0 THEN '' END AS ***,  
  16.  
  17. CASE WHEN e.id IS NULL THEN '' ELSE '√' END AS ***约束,  
  18.  
  19. a.OrigFillFactor AS 填充因子, c.crdate AS 创建时间, c.refdate AS 更改时间  
  20.  
  21. FROM dbo.sysindexes a INNER JOIN  
  22.  
  23. dbo.sysindexkeys b ON a.id = b.id AND a.indid = b.indid INNER JOIN  
  24.  
  25. dbo.syscolumns d ON b.id = d.id AND b.colid = d.colid INNER JOIN  
  26.  
  27. dbo.sysobjects c ON a.id = c.id AND c.xtype = 'U' LEFT OUTER JOIN  
  28.  
  29. dbo.sysobjects e ON e.name = a.name AND e.xtype = 'UQ' LEFT OUTER JOIN  
  30.  
  31. dbo.sysobjects p ON p.name = a.name AND p.xtype = 'PK' 
  32.  
  33. WHERE (OBJECTPROPERTY(a.id, N'IsUserTable') = 1) AND (OBJECTPROPERTY(a.id,  
  34.  
  35. N'IsMSShipped') = 0) AND (INDEXPROPERTY(a.id, a.name, 'IsAutoStatistics') = 0)  
  36.  
  37. ORDER BY c.name, a.name, b.keyno 

 

3. SQL Server数据库字典--表.视图.函数.存储过程.触发器.主键.外键.约束.规则.sql

 

  1. SELECT DISTINCT  
  2.  
  3. TOP 100 PERCENT isnull(p.name,'') AS 父对象, o.xtype,  
  4.  
  5. CASE o.xtype WHEN 'C' THEN 'CHECK 约束' WHEN 'D' THEN '默认值或DEFAULT约束'  
  6.  
  7. WHEN 'F' THEN 'FOREIGNKEY约束' WHEN 'L' THEN '日志' WHEN 'FN' THEN '标量函数'  
  8.  
  9. WHEN 'IF' THEN '内嵌表函数' WHEN 'P' THEN '存储过程' WHEN 'PK' THEN 'PRIMARYKEY约束'  
  10.  
  11. WHEN 'RF' THEN '复制筛选存储过程' WHEN 'S' THEN '系统表' WHEN 'TF' THEN '表函数'  
  12.  
  13. WHEN 'TR' THEN '触发器' WHEN 'U' THEN '用户表' WHEN 'UQ' THEN 'UNIQUE 约束'  
  14.  
  15. WHEN 'V' THEN '视图' WHEN 'X' THEN '扩展存储过程' WHEN 'R' THEN '规则' ELSE NULL  
  16.  
  17. END AS 类型, o.name AS 对象名, o.crdate AS 创建时间, o.refdate AS 更改时间,  
  18.  
  19. c.text AS 声明语句,OBJECTPROPERTY(o.id, N'IsMSShipped')  
  20.  
  21. FROM dbo.sysobjects o Left JOIN  
  22.  
  23. dbo.sysobjects p ON o.parent_obj = p.id LEFT OUTER JOIN  
  24.  
  25. dbo.syscomments c ON o.id = c.id  
  26.  
  27. WHERE --(o.xtype IN ('C','D','F','PK','UQ','L','FN','IF','TF','TR','P','R','RF','X','S','U','V')) AND  
  28.  
  29. (OBJECTPROPERTY(o.id, N'IsMSShipped') = 0) AND (isnull(p.name,'') <> N'dtproperties') 

 

关于使用SQL视图查询SQL Server数据库字典的知识就介绍到这里了,希望本次的介绍能够对您有所收获!

【编辑推荐】

  1. SQL Server 2005数据库镜像相关知识概述
  2. 一个SQL Server数据库删除数据集中重复数据的例子
  3. SQLServer 2008 R2数据库SSAS建模及扩展能力详解
  4. 如何用触发器实现记录数据库表和记录更改日志的操作
  5. SQL Server数据库使用DBCC ShowContig检查索引碎片
责任编辑:赵鹏 来源: 火魔网
相关推荐

2010-05-14 14:00:59

MySQL数据库优化

2010-07-15 17:28:50

SQL Server

2010-09-25 15:37:38

SQL语句

2011-08-15 14:29:52

SQL Server数事务

2011-09-01 12:42:09

SQL Server创建加密视图控制视图页面的访问权限

2011-04-02 11:28:10

SQL Server数报表数据库快照

2010-07-08 11:05:14

SQL Server数

2011-09-01 12:53:02

SQL Server控制视图页面的访问权限

2010-10-21 14:12:07

SQL Server游

2021-05-17 06:57:34

SQLServer数据库

2009-03-06 09:42:16

性能索引

2011-04-01 17:05:44

SQL Server数日志

2010-06-30 11:16:50

SQL Server

2011-04-29 14:30:23

2009-03-19 09:44:07

SQL Server数据库迁移数据库

2010-06-17 12:35:49

SQL Server数

2011-08-15 15:53:51

SQL Server数批量操作

2010-06-28 10:36:42

SQL Server数

2011-03-24 09:24:08

SQL Server数还原

2011-03-24 09:45:34

SQL Server数恢复
点赞
收藏

51CTO技术栈公众号