原文:获取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. ASP.NET 抓取网页内容

    (转)ASP.NET 抓取网页内容 ASP.NET 抓取网页内容-文字 ASP.NET 中抓取网页内容是非常方便的,而其中更是解决了 ASP 中困扰我们的编码问题. 需要三个类:WebRequest. ...

  2. 201621123033 《Java程序设计》第2周学习总结

    1. 本周学习总结 ·学习了String类的特点,以及其与字符数组的关系等等. ·常量池的相关概念. ·包装类的特点. 2. 书面作业 1. String-使用Eclipse关联jdk源代码 1.1 ...

  3. rsync同步数据

    1. rsync 命令格式rsync [OPTION]... SRC DESTrsync [OPTION]... SRC [USER@]HOST:DESTrsync [OPTION]... [USER ...

  4. [bzoj3601] 一个人的数论 [莫比乌斯反演+高斯消元]

    题面 传送门 思路 这题妙啊 先把式子摆出来 $f_n(d)=\sum_{i=1}^n[gcd(i,n)==1]i^d$ 这个$gcd$看着碍眼,我们把它反演掉 $f_n(d)=\sum_{i=1}^ ...

  5. 2-SAT学习整理

    关于2-SAT 问题给出的证明和思路就不再赘述 核心是对于问题给出的条件建图,然后跑tarjan缩点 (在一个强联通分量里bool值是相同的) 看集合两个元素是否在一个强联通分量来判断是否合法 利用强 ...

  6. P2625 豪华游轮 (背包$dp$,数学)

    题目链接 Solution 贼有意思的一个题目. 可以发现阻止我们走的更远的就是那些需要反向走的路程. 然后发现当角度越接近 \(180^\circ\) ,对我们最终的答案则更优. 所以先是一个背包把 ...

  7. tornado获取application/json类型的入参

    tornado本身是不支持直接获取json入参的,在BaseHandler中定义方法get_json_argument,以供调用 class BaseHandler(tornado.web.Reque ...

  8. git隐藏文件复制

    从网上down的开源项目,如何添加到自己的github上呢?   问题:直接复制老项目到自己的目录,隐藏的.git文件不会被复制过去,就算是执行cp命令,也不会复制!导致项目运行会出错!!   解决: ...

  9. YV12 NV12区别

    用videoCapture和IAMStreamConfig拿到的支持的格式列表.发现支持2中图像格式,YV12和NV12.具体是怎么样的内存分布不知道.查了些文档.自己修改了几个图.看出了点端倪 YV ...

  10. Hibernate中多种方式解除延迟加载

    问题引发:因为dao使用load(),默认延迟加载的,当在biz关闭session之后,UI层无法获取对象的非id属性值 解决方案: 1.变成get,即时加载 2.用Hibernate.isIniti ...