原文:获取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. .net网站数据抓取

    最新项目需要抓取人民币汇率中间价的数据,所以就写了个简单的爬虫抓取数据.抓取的网站为:http://www.safe.gov.cn/wps/portal/sy/tjsj_hlzjj_inquire # ...

  2. unity射线碰撞检测+LayerMask的使用

    射线在unity中是个很方便的东西,对对象查找.多用于碰撞检测(如:子弹飞行是否击中目标).角色移动等提供了很大的帮助,在此做个总结与大家分享下 ,若有不足欢迎吐槽 好了,话补多说啦,直接进入主题: ...

  3. jQuery选择器之类选择器

    类选择器,顾名思义,通过class样式类名来获取节点. 描述: $('.class') 类选择器,相对于id选择器来说,效率相对会低一些,但是优势就是可以多选. 同样的jQuery在实现上,对于类选择 ...

  4. [SP10707]COT2 - Count on a tree II

    题目大意:有一棵$n$个节点的树,第$i$个点有一个颜色$C_i$,$m$组询问,每次问$x->y$的路径上有多少种颜色 题解:树上莫队,把树按欧拉序展开成一条链,令第$i$个节点第一次出现在序 ...

  5. 等差子序列(sequence)

    等差子序列(sequence) 题目描述 给一个1到N的排列{Ai},询问是否存在1<= p1 < p2 < p3 < p4 < p5 < - < pLen ...

  6. NOI退役啦

    没进前一百 签的上交一本 高三加油喽

  7. Greedy Gift Givers

    Greedy Gift Givers A group of NP (2 ≤ NP ≤ 10) uniquely named friends has decided to exchange gifts ...

  8. 启动、停止、删除Windows服务

    启动: @echo.服务启动...... @echo off @sc create Service_SMS binPath= "D:\公司制度等文件\项目\河北劳动力市场检测系统\Windo ...

  9. 在GitHub多个帐号上添加SSH公钥

    GitHub后台可以添加多个SSH Keys,但是同一个SSH Keys只能在添加在一个帐号上(添加时提示“Key is already in use”).理由很容易想到,SSH公钥使用时相当于用户名 ...

  10. win安装pycurl和linux安装pycurl

    1.win pip install wheel http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载对应的包: pip install e:\pycurl-7.4 ...