简单的3个SQL视图搞定所有SqlServer数据库字典 (转)

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

简单的3个SQL视图搞定所有SqlServer数据库字典


(2007-11-29更新)网上有很多SQL SERVER数据库字典的SQL语句,七零八落,我在工作整理了一下思路,总结SQL代码如下。数据库字典包括表结构(分2K和2005)、 索引和主键.外键.约束.视图.函数.存储过程.触发器.规则。可以在企业管理器、查询分析器中简单执行,直接了当的查出SQL2K及SQL2005的所有数据字典,方便文档的编写,希望对大家有帮助。

1. SqlServer2000数据库字典--表结构.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  表说明, 
      a.colorder 
AS  字段序号, a.name  AS  字段名,  CASE   WHEN   COLUMNPROPERTY (a.id, 
      a.name, 
' IsIdentity ' =   1   THEN   ' '   ELSE   ''   END   AS  标识, 
      
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  =  si.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  长度,  COLUMNPROPERTY (a.id, a.name,  ' PRECISION '
      
AS  精度,  ISNULL ( COLUMNPROPERTY (a.id, a.name,  ' Scale ' ),  0 AS  小数位数, 
      
CASE   WHEN  a.isnullable  =   1   THEN   ' '   ELSE   ''   END   AS  允许空,  ISNULL (e. text ''
      
AS  默认值,  ISNULL (g. [ value ] '' AS  字段说明, d.crdate  AS  创建时间, 
      
CASE   WHEN  a.colorder  =   1   THEN  d.refdate  ELSE   NULL   END   AS  更改时间
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  AND  
      g.name 
=   ' MS_Description '   LEFT   OUTER   JOIN
      dbo.sysproperties f 
ON  d.id  =  f.id  AND  f.smallid  =   0   AND  
      f.name 
=   ' MS_Description '
ORDER   BY  d.name, a.colorder

    SqlServer2005数据库字典--表结构.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  表说明, 
      a.colorder 
AS  字段序号, a.name  AS  字段名,  CASE   WHEN   COLUMNPROPERTY (a.id, 
      a.name, 
' IsIdentity ' =   1   THEN   ' '   ELSE   ''   END   AS  标识, 
      
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  =  si.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  长度,  COLUMNPROPERTY (a.id, a.name,  ' PRECISION '
      
AS  精度,  ISNULL ( COLUMNPROPERTY (a.id, a.name,  ' Scale ' ),  0 AS  小数位数, 
      
CASE   WHEN  a.isnullable  =   1   THEN   ' '   ELSE   ''   END   AS  允许空,  ISNULL (e. text ''
      
AS  默认值,  ISNULL (g. [ value ] '' AS  字段说明, d.crdate  AS  创建时间, 
      
CASE   WHEN  a.colorder  =   1   THEN  d.refdate  ELSE   NULL   END   AS  更改时间
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
      sys.extended_properties g 
ON  a.id  =  g.major_id  AND  a.colid  =  g.minor_id  AND  
      g.name 
=   ' MS_Description '   LEFT   OUTER   JOIN
      sys.extended_properties f 
ON  d.id  =  f.major_id  AND  f.minor_id  =   0   AND  
      f.name 
=   ' MS_Description '
ORDER   BY  d.name, 字段序号

2.  SqlServer数据库字典--索引.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  创建时间, c.refdate  AS  更改时间
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数据库字典--表.视图.函数.存储过程.触发器.主键.外键.约束.规则.sql
SELECT   DISTINCT  
      
TOP   100   PERCENT   isnull (p.name, '' AS  父对象, o.xtype, 
      
CASE  o.xtype  WHEN   ' C '   THEN   ' CHECK 约束 '   WHEN   ' D '   THEN   ' 默认值或DEFAULT约束 '
       
WHEN   ' F '   THEN   ' FOREIGNKEY约束 '   WHEN   ' L '   THEN   ' 日志 '   WHEN   ' FN '   THEN   ' 标量函数 '
       
WHEN   ' IF '   THEN   ' 内嵌表函数 '   WHEN   ' P '   THEN   ' 存储过程 '   WHEN   ' PK '   THEN   ' PRIMARYKEY约束 '
       
WHEN   ' RF '   THEN   ' 复制筛选存储过程 '   WHEN   ' S '   THEN   ' 系统表 '   WHEN   ' TF '   THEN   ' 表函数 '
       
WHEN   ' TR '   THEN   ' 触发器 '   WHEN   ' U '   THEN   ' 用户表 '   WHEN   ' UQ '   THEN   ' UNIQUE 约束 '
       
WHEN   ' V '   THEN   ' 视图 '   WHEN   ' X '   THEN   ' 扩展存储过程 '   WHEN   ' R '   THEN   ' 规则 '   ELSE   NULL
       
END   AS  类型, o.name  AS  对象名, o.crdate  AS  创建时间, o.refdate  AS  更改时间, 
      c.
text   AS  声明语句, OBJECTPROPERTY (o.id, N ' IsMSShipped ' )
FROM  dbo.sysobjects o  Left   JOIN
      dbo.sysobjects p 
ON  o.parent_obj  =  p.id  LEFT   OUTER   JOIN
      dbo.syscomments c 
ON  o.id  =  c.id
WHERE   -- (o.xtype IN ('C','D','F','PK','UQ','L','FN','IF','TF','TR','P','R','RF','X','S','U','V')) AND 
      ( OBJECTPROPERTY (o.id, N ' IsMSShipped ' =   0 AND  ( isnull (p.name, '' <>  N ' dtproperties ' )
ORDER   BY  o.xtype  DESC



本文转自Sam Lin博客园博客,原文链接:http://www.cnblogs.com/samlin/archive/2008/02/29/1085740.html,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
3天前
|
SQL 存储 大数据
济南sql数据库工程师
济南SQL数据库工程师是负责管理和维护SQL数据库的专业人员。以下是关于济南SQL数据库工程师的一些详细介绍: 一、岗位职责 1. 负责数据库日常巡检,及时反馈运行状况,并跟踪解决问题,确
42 21
|
3天前
|
SQL 供应链 关系型数据库
数据库sql超市
当涉及到使用SQL来管理超市数据库时,通常需要考虑多个方面,包括商品管理、订单处理、销售分析、库存管理等。以下是一个简单的超市数据库SQL示例,以及一些常见的查询操作。 **1. 数据库表设计*
43 17
|
3天前
|
SQL 监控 安全
sql数据库清除工具
在SQL数据库管理中,清理和优化数据库是一个重要的环节,特别是当数据库日志文件过大时。虽然没有特定的“SQL数据库清除工具”可以一键解决所有问题,但你可以使用多种方法和工具来清理SQL Server数
25 6
|
3天前
|
SQL 关系型数据库 MySQL
sql数据库命令
SQL(Structured Query Language,结构化查询语言)是用于管理关系数据库的标准编程语言。以下是一些常用的 SQL 数据库命令: 1. **创建数据库**: ``
24 7
|
3天前
|
SQL 存储 关系型数据库
sql 数据库教程
SQL数据库教程可以从以下几个方面进行介绍: 一、SQL概述与基本概念 SQL,全称Structured Query Language,即结构化查询语言,是用于管理关系型数据库的编程语言。
18 0
|
3天前
|
SQL 存储 关系型数据库
数据库更新sql
SQL Server是由微软公司开发的一种关系型数据库管理系统(RDBMS),用于存储和检索数据。以下是对SQL Server的详细介绍: 一、基本特性 1. 可扩展性:SQL Serve
|
3天前
|
SQL JavaScript 前端开发
js链接sql数据库
在JavaScript中直接连接SQL数据库(如MySQL、PostgreSQL等)通常不是推荐的做法,特别是当JavaScript在客户端(如浏览器)中运行时。这是因为将数据库凭据暴露给客户端会导致
13 0
|
8天前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之如何SQL同步数据到Oracle数据库中
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
9天前
|
SQL 关系型数据库 数据库
阿里云数据库 RDS SQL Server版实战【性能优化实践、优点探析】
本文探讨了Amazon RDS SQL Server版在云数据库中的优势,包括高可用性、可扩展性、管理便捷、安全性和成本效益。通过多可用区部署和自动备份,RDS确保数据安全和持久性,并支持自动扩展以适应流量波动。可视化管理界面简化了监控和操作,而数据加密和访问控制等功能保障了安全性。此外,弹性计费模式降低了运维成本。实战应用显示,RDS SQL Server版能有效助力企业在促销高峰期稳定系统并保障数据安全。阿里云的RDS SQL Server版还提供了弹性伸缩、自动备份恢复、安全性和高可用性功能,进一步优化性能和成本控制,并与AWS生态系统无缝集成,支持多种开发语言和框架。
49 2
|
9天前
|
SQL JSON atlas
实时计算 Flink版产品使用合集之SQL Server CDC是否支持抽取SQL Server视图
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。