zoukankan      html  css  js  c++  java
  • SqlServer用户数据库的系统视图sysobjects、syscolumns、systypes

      想获得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.colid
    18 
    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 a
    36 
    37 LEFT JOIN systypes b ON a.xtype=b.xusertype
    38 
    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.id
    42 
    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   =0
    46 
    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值。 

    文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。 欢迎大家留言交流,转载请注明出处。
  • 相关阅读:
    线程的start和run方法的区别
    GC相关的面试题
    AVR单片机教程——EasyElectronics Library v1.3手册
    我回来了
    继续停更通知
    停更通知
    玩玩24点(上)
    AVR单片机教程——EasyElectronics Library v1.2手册
    AVR单片机教程——数码管
    算法基础课程总结
  • 原文地址:https://www.cnblogs.com/yhlx125/p/2648538.html
Copyright © 2011-2022 走看看