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

原文:https://www.cnblogs.com/qiantuwuliang/archive/2009/06/06/1497372.html


(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 '),  0AS 小数位数, 
       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 '),  0AS 小数位数, 
       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 '=  1AND ( OBJECTPROPERTY(a.id, 
      N ' IsMSShipped '=  0AND ( 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 '=  0AND ( isnull(p.name, ''<> N ' dtproperties ')
ORDER  BY o.xtype  DESC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值