获取SQLServer的最完整数据字典的SQL语句

Posted Cumulonimbus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取SQLServer的最完整数据字典的SQL语句相关的知识,希望对你有一定的参考价值。

获取SQLServer 的最完整数据字典

以下代码在Microsoft SQL Server 2013中执行通过

 

SELECT

sysobjects.name AS 表名称 ,
--sys.extended_properties.[value] AS 表说明 ,
syscolumns.name AS 字段名称 ,
--properties.[value] AS 字段说明 ,
systypes.name AS 字段类型 ,
syscolumns.length AS 字段长度 ,
ISNULL(COLUMNPROPERTY(syscolumns.id, syscolumns.name,Scale), 0) AS 小数位数 ,

CASE WHEN syscolumns.isnullable=0
 THEN ‘‘
ELSE 
END AS 是否为空 ,
CASE WHEN syscomments.text IS NULL
 THEN ‘‘ ELSE syscomments.text
END AS 缺省值 ,
CASE WHEN COLUMNPROPERTY(syscolumns.id, syscolumns.name, IsIdentity)= 1
 THEN  ELSE ‘‘
END AS 递增字段 ,
CASE WHEN sysindexes.name IS NULL
 THEN ‘‘
ELSE sysindexes.name
END AS 索引名称 ,
CASE WHEN sysindexkeys.keyno IS NULL
 THEN ‘‘
ELSE CONVERT(VARCHAR(10),sysindexkeys.keyno )
END AS 索引位置 ,
CASE WHEN sysindexes.indid=1
 THEN  聚集索引 
WHEN sysindexes.indid>1 AND sysindexes.indid<>255
 THEN  非聚集索引 
WHEN sysindexes.indid IS NULL
 THEN ‘‘
ELSE
  其他 
END AS 索引类型 ,
CASE WHEN EXISTS
(SELECT 1
  FROM sysobjects
 WHERE xtype = PK AND name IN
 (SELECT name
    FROM sysindexes
   WHERE indid IN
   (SELECT indid
      FROM sysindexkeys
     WHERE id = syscolumns.id AND colid = syscolumns.colid)))
 THEN  ELSE ‘‘
END AS 主键 ,
CASE WHEN sysforeignkeys.constid IS NULL
 THEN ‘‘
ELSE 
END AS 外健
FROM syscolumns                            -- 数据表字段
INNER JOIN sysobjects                        -- 数据对象
  ON sysobjects.id = syscolumns.id
INNER JOIN systypes                         -- 数据类型
  ON syscolumns.xtype = systypes.xtype
LEFT OUTER JOIN sys.extended_properties properties       -- 字段属性信息
  ON syscolumns.id = properties.Minor_id
 AND syscolumns.colid = properties.Minor_id
LEFT OUTER JOIN sys.extended_properties                -- 表属性信息
  ON sysobjects.id = sys.extended_properties.Minor_id
 AND sys.extended_properties.Minor_id = 0
LEFT OUTER JOIN syscomments                -- 注释信息
  ON syscolumns.cdefault = syscomments.id
LEFT OUTER JOIN sysindexkeys                -- 索引中的键或列的信息
  ON sysindexkeys.id = syscolumns.id
 AND sysindexkeys.colid = syscolumns.colid
LEFT OUTER JOIN sysindexes                  -- 数据库 索引表
  ON sysindexes.id = sysindexkeys.id
 AND sysindexes.indid = sysindexkeys.indid
LEFT OUTER JOIN sysforeignkeys
  ON sysforeignkeys.fkeyid = syscolumns.id
 AND sysforeignkeys.fkey = syscolumns.colid
WHERE (sysobjects.xtype = U)
order by sysobjects.id,syscolumns.colid

 

转载于 http://blog.csdn.net/baoqiangwang/article/details/4695361

以上是关于获取SQLServer的最完整数据字典的SQL语句的主要内容,如果未能解决你的问题,请参考以下文章

怎么用SQL语句获取指定数据库中的所有表名

转---系统字典

SqlServer:表的创建和约束

sqlserver里面执行sql语句的时候 怎么获取受影响行数

SQLServer中获取所有数据库名所有表名 描述所有字段名的SQL语句

sqlserver 插入完整的数据后,为啥查询出来某个字段为只显示一半