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

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

你可能感兴趣的:(sqlserver)