SqlServer用户数据库的系统视图sysobjects、syscolumns、systypes
发布日期:2021-08-30 20:31:06 浏览次数:2 分类:技术文章

本文共 2053 字,大约阅读时间需要 6 分钟。

  想获得SqlServer用户数据库的Schema,本来想直接用ADO的SqlConnection对象的GetSchema()方法,但是架构中居然没有PrimaryKeys,只好借助于T-SQL语句了!在网上找到了一下的语句,可以正确执行。

查询用户表的信息
1 SELECT 2  3 表名=CASE WHEN a.colorder=1 THEN d.name ELSE '' END, 4  5 表说明=CASE WHEN a.colorder=1 THEN isnull(f.VALUE,'') ELSE '' END, 6  7 字段序号=a.colorder, 8  9 字段名=a.name,10 11 标识=CASE WHEN COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 THEN '√'ELSE '' END,12 13 主键=CASE WHEN EXISTS(SELECT 1 FROM sysobjects WHERE xtype='PK' AND name IN (14 15 SELECT name FROM sysindexes WHERE indid IN(16 17 SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid18 19 ))) THEN '√' ELSE '' END,20 21 类型=b.name,22 23 占用字节数=a.LENGTH,24 25 长度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),26 27 小数位数=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),28 29 允许空=CASE WHEN a.isnullable=1 THEN '√'ELSE '' END,30 31 默认值=isnull(e.text,''),32 33 字段说明=isnull(g.[VALUE],'')34 35 FROM syscolumns a36 37 LEFT JOIN systypes b ON a.xtype=b.xusertype38 39 INNER JOIN sysobjects d ON a.id=d.id AND d.xtype='U' AND d.name<>'dtproperties'40 41 LEFT JOIN syscomments e ON a.cdefault=e.id42 43 LEFT JOIN sys.extended_properties g ON a.id=g.major_id AND a.colid=g.major_id  44 45 LEFT JOIN sys.extended_properties f ON d.id=f.major_id AND f.major_id   =046 47 --where d.name='要查询的表' --如果只查询指定表,加上此条件48 49 ORDER BY a.id,a.colorder

  执行结果上图所示。对应的sysobjects、syscolumns、systypes系统表没有找到,但是系统视图中可以看到,sys.sysobjects、sys.syscolumns、sys.systypes几个系统视图。

  获取数据表的方法:

select * from sysobjects where xType = 'U'

  sysobjects:SQL-SERVER的每个数据库内都有此系统表,它存放该数据库内创建的所有对象,如约束、默认值、日志、规则、存储过程等,每个对象在表中占一行。以下是此系统表的字段名称和相关说明。Name,id,xtype,uid,status:分别是对象名,对象ID,对象类型,所有者对象的用户ID,对象状态。 
  xtype:对象类型。可以是下列对象类型中的一种: 
   C = CHECK 约束 
   D = 默认值或 DEFAULT 约束 
   F = FOREIGN KEY 约束 
   L = 日志 
   FN = 标量函数 
   IF = 内嵌表函数 
   P = 存储过程 
   PK = PRIMARY KEY 约束(类型是 K) 
   RF = 复制筛选存储过程 
   S = 系统表 
   TF = 表函数 
   TR = 触发器 
   U = 用户表 
   UQ = UNIQUE 约束(类型是 K) 
   V = 视图 
   X = 扩展存储过程 
  当xtype='U' and status>0代表是用户建立的表,对象名就是表名,对象ID就是表的ID值。 

转载于:https://www.cnblogs.com/yhlx125/archive/2012/08/21/2648538.html

转载地址:https://blog.csdn.net/weixin_34050005/article/details/94045256 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:[GDAL]写入shp
下一篇:HTML 颜色表示

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月18日 13时36分14秒