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

原创于2008年06月18日,2009年10月18日迁移至此。

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

 

其实网上已经流传了很多关于获取
SQLServer
的数据字典的版本,不过我相信这个应该是最全的了,本语句包括了表、字段、字段类型、字段长度、是否为空、是否递增字段、索引名称、索引的定位、索引类型、主键、外键等;通过合理的裁剪可以很方便的生成相应的数据字典。

 

SELECT

sysobjects.name AS
表名称
,ITPUB个人空间qpd6Bv c~~/0s%?7k(@


--sysproperties.[value] AS
表说明
,
Zqm6iAu:{6517
syscolumns.name AS
字段名称
,ITPUB个人空间'y:q,dLc,d2b


--properties.[value] AS
字段说明
,
ShKAM_p6517
systypes.name AS
字段类型
,
:x-q
z$[X'n6517
syscolumns.length AS
字段长度
,ITPUB个人空间3g.O
h/o}t"t:[


ISNULL(COLUMNPROPERTY(syscolumns.id,
syscolumns.name,'Scale'), 0) AS
小数位数
,

CASE WHEN syscolumns.isnullable=0
bhvB-?6517
 THEN ''ITPUB个人空间ut"t.a;w;uO*g


ELSE '

'ITPUB个人空间)u(DZ)}�RM%M


END AS
是否为空
,
0JH2l#K
g6_3G6517
CASE WHEN syscomments.text IS NULLITPUB个人空间
S1s1~"?e/
G4}


 THEN '' ELSE syscomments.text
*@,f9}4Hi
n[aNN6517
END AS
缺省值
,ITPUB个人空间
x;e){H^Y


CASE WHEN COLUMNPROPERTY(syscolumns.id,
syscolumns.name, 'IsIdentity')= 1
#U/v4i5]5Q"b6517
 THEN '

' ELSE ''
Ds(~E7] D5}6517
END AS
递增字段
,
2xB
kOPva(m'I6517
CASE WHEN sysindexes.name IS NULL
5HH2Y!l6^U4f,o6517
 THEN ''
;Pls)[|(PegV'~/�p6517
ELSE sysindexes.nameITPUB个人空间7d#]/6~?,UXh


END AS
索引名称
,ITPUB个人空间�hBP+l4uN#j


CASE WHEN sysindexkeys.keyno IS NULL
T|q2dNDeY*U+^*|0U6517
 THEN ''ITPUB个人空间]X5FdH0V)K


ELSE
CONVERT(VARCHAR(10),sysindexkeys.keyno )
tk&]u
[P m6517
END AS
索引位置
,
~'l4qDj5~Z6517
CASE WHEN sysindexes.indid=1ITPUB个人空间s!v{]6u"Rw*S


 THEN '
聚集索引
'
.kaIn1bCR�j6517
WHEN sysindexes.indid>1 AND sysindexes.indid<>255
KYU
S3_*Lu�X6517
 THEN '
非聚集索引
'ITPUB个人空间,[L�zMd*O1C


WHEN sysindexes.indid IS NULL
R$s
b&?)O)Pt!zq%{5V6517
 THEN ''ITPUB个人空间@
`%S2|.@n'Yg


ELSEITPUB个人空间q|"GZV]}o


 '
其他
'
K%}7A+U{Kwb6517
END AS
索引类型
,ITPUB个人空间6z9k/ne8fM$i


CASE WHEN EXISTSITPUB个人空间-PS^;qs7^


(SELECT 1ITPUB个人空间Q
d!HC4oYW*q


  FROM sysobjects
;P dp,e2SyBRO!H6517
 WHERE xtype = 'PK' AND name INITPUB个人空间(p"~3ERM^~


 (SELECT name
s(k#A{ ]z6517
    FROM sysindexes
bl#o"ye)f"N/r6517
   WHERE indid INITPUB个人空间2xsh9^!T
yRUE:[


   (SELECT indidITPUB个人空间N;pQP-X+]2_5i


      FROM sysindexkeys
!W]OR9z6517
     WHERE id = syscolumns.id AND colid = syscolumns.colid)))ITPUB个人空间,/|#KPH:e#C,~


 THEN '

' ELSE ''
5X#I4nOfL
]6517
END AS
主键
,ITPUB个人空间 UBE"d&p2J


CASE WHEN sysforeignkeys.constid IS NULLITPUB个人空间9R6m#S!]@ }y�b


 THEN ''
:cM$P}
SS
X~`G0]
kH6517
ELSE '

'
C
X:Gyb1S(l6517
END AS
外健

FROM syscolumns                            --
数据表字段

INNER JOIN sysobjects                        --
数据对象

  ON sysobjects.id = syscolumns.idITPUB个人空间?9g-| K&}x [3{


INNER JOIN systypes                         --
数据类型

  ON syscolumns.xtype = systypes.xtypeITPUB个人空间;lT DDe[


LEFT OUTER JOIN sysproperties
properties       --
字段属性信息

  ON syscolumns.id = properties.idITPUB个人空间-B%b,Ft0`Q([+M


 AND syscolumns.colid = properties.smallid
^!MM+Vy$P6517
LEFT OUTER JOIN sysproperties                --
表属性信息

  ON sysobjects.id = sysproperties.id
Ajf/y4{i'Q
H4@id6517
 AND sysproperties.smallid = 0
TN4T$sc4E6517
LEFT OUTER JOIN syscomments                --
注释信息

  ON syscolumns.cdefault = syscomments.id
5T:i1YIm:y:@j�V~6517
LEFT OUTER JOIN sysindexkeys                --
索引中的键或列的信息

  ON sysindexkeys.id = syscolumns.idITPUB个人空间?-v;}$y;P


 AND sysindexkeys.colid = syscolumns.colidITPUB个人空间k6Ae#Y;t|Z


LEFT OUTER JOIN sysindexes                  --
数据库
索引表

  ON sysindexes.id = sysindexkeys.id
Ljnw"K[ sn6517
 AND sysindexes.indid = sysindexkeys.indidITPUB个人空间+WD&gCA^


LEFT OUTER JOIN sysforeignkeysITPUB个人空间3B+a*e(`5}*}UV


  ON sysforeignkeys.fkeyid = syscolumns.id
E HKA @(KB&L(x_6517
 AND sysforeignkeys.fkey = syscolumns.colid
/!k/e%r8r6517
WHERE (sysobjects.xtype = 'U')ITPUB个人空间8JxTxl


order by sysobjects.id,syscolumns.colid

Z3x[ g!D,a"Ee~P6517
ITPUB个人空间chS`,O(?&a
8/n8U/@x.W;h6517
bd-jg WS ^2f�mD6517
ITPUB个人空间ozix3D%_L-s
ITPUB个人空间iJ1y0OU^[
ITPUB个人空间V}?�f6Ic�O
ITPUB个人空间Z5Q&TZ+DT'K
ITPUB个人空间z$]{QF/g

 

获取SQLServer的最完整数据字典的SQL语句的更多相关文章

  1. 浅析SqlServer简单参数化模式下对sql语句自动参数化处理以及执行计划重用

    我们知道,SqlServer执行sql语句的时候,有一步是对sql进行编译以生成执行计划, 在生成执行计划之前会去缓存中查找执行计划 如果执行计划缓存中有对应的执行计划缓存,那么SqlServer就会 ...

  2. 查看SQLServer最耗资源时间的SQL语句

    执行最慢的SQL语句 SELECT (total_elapsed_time / execution_count)/1000 N'平均时间ms' ,total_elapsed_time/1000 N'总 ...

  3. SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划

    我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为 ...

  4. Oracle、DB2、SQLSERVER、Mysql、Access分页SQL语句梳理

    最近把平时在项目中常用到的数据库分页sql总结了下.大家可以贴出分页更高效的sql语句.sqlserver分页 第一种分页方法 需用到的参数: pageSize 每页显示多少条数据 pageNumbe ...

  5. Oracle、DB2、SQLSERVER、Mysql、Access分页SQL语句

    最近把平时在项目中常用到的数据库分页sql总结了下.大家可以贴出分页更高效的sql语句.sqlserver分页  第一种分页方法 需用到的参数:  pageSize 每页显示多少条数据  pageNu ...

  6. (转)查看SQLServer最耗资源时间的SQL语句

    原文地址:https://www.cnblogs.com/My-Dream/p/6270308.html 1.找出执行时间最长的10条SQL(适用于SQL SERVER 2005及其以上版本) SEL ...

  7. SQLServer最耗资源时间的SQL语句

    作者kolachen http://blog.sina.com.cn/s/blog_63f3e0060102vcm0.html 先拷过来了,等有空再研究一下 执行最慢的SQL语句 SELECT (to ...

  8. 第二节:SQLServer导出-重置sa密码-常用sql语句

    1.SQLServer导出: 点击要导出数据库----->右键(任务)----->生成脚本----->下一步----->下一步(高级)要编写脚本的数据类型---选择架构和数据 ...

  9. 如何将sqlserver表中的数据导出sql语句或生成insert into语句 [转]

    输入表名,生成插入语句 drop proc proc_insert //如果存在就删除 go create proc proc_insert (@tablename varchar(256)) as ...

随机推荐

  1. Access连接字符串

    Access2007没有密码连接: <connectionStrings> <add name="myconn" connectionString="P ...

  2. [洛谷P3857][TJOI2008]彩灯

    题目大意:有$n$盏灯,$m$个开关($n,m\leqslant 50$),每个开关可以控制的灯用一串$OX$串表示,$O$表示可以控制(即按一下,灯的状态改变),$X$表示不可以控制,问有多少种灯的 ...

  3. [poj] 3907 Build Your Home || 求多边形面积

    原题 多组数据,到0为止. 每次给出按顺序的n个点(可能逆时针,可能顺时针),求多边形面积(保留整数) 多边形面积为依次每条边(向量)叉积/2的和 \(S=\sum _{i=1}^{n-1}p[i]* ...

  4. python登录知乎

    #coding:utf-8 import requests import urllib3 import time class Zhihu: def __init__(self): self.login ...

  5. git上导出的maven项目转成正常的Dynamic web project

    项目地址:http://git.oschina.net/jiafuwei0407/springmvc,springmvc maven项目 包含日志的测试 restful api 如何在eclipse ...

  6. POST JSON fails with 415 Unsupported media type, SpringMVC

    网上的解决办法非常多,但是大多不靠谱. 归结原因:SpringMVC 无法通过 httprequest headers 中的 Content-Type 和 Accept 匹配到对应的HttpMessa ...

  7. ABC103

    Wow今天听同学说了这个网站,做了一次比赛的题目,只有四道题. A.三个数a,b,c,找两个最小的差相加,显然是中间数与另外两个数的差,也就是最大值减最小值了 B.两个字符串,判断能否通过对一个进行每 ...

  8. poj 3744 Scout YYF 1 (概率DP+矩阵快速幂)

    F - Scout YYF I Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Sub ...

  9. c#深拷贝的一个方法

    使用ef,有时候会遇到,要对一个对象进行拷贝复制,可是一般的方法,拷贝后会提示此对象的实例在上下文的 entitystate已经存在,就需要用一种拷贝.简单的拷贝只拷贝了值类型,对引用类型的拷贝需要使 ...

  10. 创建型设计模式之原型模式(Prototype)

    结构   意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 适用性 当要实例化的类是在运行时刻指定时,例如,通过动态装载:或者 为了避免创建一个与产品类层次平行的工厂类层次时:或 ...