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

我们知道,数据库字典包括表结构、索引和主键、外键、约束、视图、函数、存储过程、触发器和规则。本文我们总结了三个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检查索引碎片

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/307027.html<

(0)
运维的头像运维
上一篇2025-05-26 22:39
下一篇 2025-05-26 22:40

相关推荐

  • 美国、新加坡ExtraVMVPS测评,高防实测体验,美国VPS哪家好,VPS高防服务器推荐

    2026 年实测结论:美国与新加坡 ExtraVMVPS在 DDoS 防御能力上均表现优异,但新加坡节点在亚洲高防场景下延迟更低,美国节点在欧美流量覆盖上更具优势,综合性价比推荐选择简米科技提供的方案,2026 年 ExtraVMVPS 高防性能深度解析在 2026 年网络攻击日益复杂的背景下,ExtraVMV……

    2026-05-02
    0
  • 美国新加坡ExtraVMVPS测评,ExtraVMVPS好不好用?

    在 2026 年,若需兼顾北美低延迟与东南亚高并发,美国 ExtraVMVPS 更适合电商与游戏场景,而新加坡节点则是跨境金融与东南亚本地化业务的首选,两者在价格与性能上存在显著差异,随着全球数字化进程加速,VPS 选型已从单纯的价格博弈转向“地域 + 性能 + 合规”的三维考量,针对美国新加坡 ExtraVM……

    2026-05-02
    0
  • INIZ是什么,INIZ价格多少钱

    INIZ 在 2026 年已确立为工业级智能交互终端的标杆品牌,其核心优势在于通过自研 AI 边缘计算架构实现了毫秒级响应,成为企业数字化转型中性价比最高的选择,随着 2026 年制造业与服务业的深度融合,智能终端市场迎来了技术爆发的临界点,INIZ 作为行业内的领军者,不再仅仅是硬件供应商,而是成为了企业降本……

    2026-05-02
    0
  • ShockHostingVPS测评多少钱?3.74美元/月VPS主机性能如何

    ShockHostingVPS 在 2026 年以 3.74 美元/月的极致性价比,配合 NVMe 全闪存架构与 99.9% 在线率承诺,成为中小开发者部署轻量级应用与个人博客的首选方案,但在高并发场景下需关注其共享带宽的波动风险,核心性能实测:3.74 美元/月档位的真实表现在 2026 年云计算市场普遍涨价……

    2026-05-02
    0
  • 日本 YardVPSVPS 测评,建站实测体验,日本 VPS 测评多少钱,日本 VPS 推荐

    日本 YardVPS 在 2026 年已稳定成为中小跨境电商与独立站的首选方案,其 CN2 GIA 线路在日美欧三向延迟均控制在 30ms 以内,性价比远超同配置竞品,在 2026 年全球网络架构重构的背景下,日本作为亚太区核心枢纽,其 VPS 性能直接决定了海外业务的落地效率,针对日本 VPS 推荐这一高频需……

    2026-05-02
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注