SQL SERVER 系统表应用

来源:互联网 发布:js调用webservice接口 编辑:程序博客网 时间:2024/04/30 09:56

 SQL SERVER 系统表应用

 

 

0.查询表字段的标题备注

SELECT  A.COLID, UPPER(A.NAME) AS NAME,ISNULL(C.VALUE,A.NAME) AS REMARK , UPPER(B.NAME) AS DATATYPE,
  (CASE WHEN A.XPREC=0 THEN A.LENGTH ELSE A.XPREC END) AS XPREC,
  A.XSCALE, A.ISNULLABLE,A.CDEFAULT
 FROM SYSCOLUMNS A INNER JOIN SYSTYPES B
ON (A.XTYPE=B.XTYPE) LEFT JOIN SYS.extended_properties C ON (A.ID=C.MAJOR_ID and A.COLID=C.MINOR_ID)
 WHERE A.ID= OBJECT_ID('TABLENAME')  ORDER BY A.COLID

 

1.查询出当前数据库的所有主键信息。

SELECT A.parent_obj AS TABLEID,
       UPPER(E.NAME) AS TABLENAME,
       UPPER(A.NAME) AS INDEXNAME,
       UPPER(D.NAME) AS COLNAME,
       C.KEYNO AS COLNO,
       (SELECT TOP 1 KEYNO
          FROM sysindexkeys
         WHERE ID = B.ID
           AND INDID = B.INDID
         ORDER BY KEYNO DESC) AS KEYCNT
  FROM sysobjects   A,
       sysindexes   B,
       sysindexkeys C,
       syscolumns   D,
       sysobjects   E
 WHERE (A.xtype = 'PK')
   AND (A.parent_obj = B.ID AND A.NAME = B.NAME)
   AND (B.ID = C.ID AND B.INDID = C.INDID)
   AND (C.ID = D.ID AND C.COLID = D.COLID)
   AND (A.parent_obj = E.ID AND E.XTYPE = 'U' AND E.NAME <> 'dtproperties')
 ORDER BY A.parent_obj, A.NAME 

 2.查询出当前数据库的所有索引名称及索引字段 ,不包含主键。
SELECT X.*, Y.FIELDCNT
  FROM (SELECT A.id as tableid,
               object_name(A.id) as tablename,
               A.name AS INDNAME,
               B.INDID,
               C.COLID,
               C.NAME AS COLNAME
          FROM sysindexes A, sysindexkeys B, syscolumns C, sysobjects D
         where (A.indid > 0 and A.indid < 255 and (A.status &64) = 0)
           AND (A.ID = B.ID AND A.INDID = B.INDID)
           AND (B.ID = C.ID AND B.COLID = C.COLID)
           AND (C.ID = D.ID AND D.XTYPE = 'U' AND D.PARENT_OBJ = 0 AND
               D.NAME <> 'dtproperties')
           AND NOT EXISTS (SELECT 1
                  FROM sysobjects
                 WHERE XTYPE = 'PK'
                   AND PARENT_OBJ > 0
                   AND NAME = A.NAME)) X,
       (SELECT ID, INDID, MAX(KEYNO) AS FIELDCNT
          FROM sysindexkeys
         GROUP BY ID, INDID) Y
 WHERE X.tableid = Y.ID
   AND X.INDID = Y.INDID
 ORDER BY X.TABLEID, X.INDNAME, X.COLID

 

3.查询外键,约束,字段默认值。

select (CASE a.xtype
         WHEN 'F' THEN
          '外键'
         WHEN 'C' THEN
          '约束'
         WHEN 'D' THEN
          '默认值'
       END) AS lx,
       a.name AS name,
       b.text
  from sysobjects a
  left outer join syscomments b on a.id = b.id
 where (a.xtype IN ('C', 'F','D'))
   AND (OBJECTPROPERTY(a.id, N'IsMSShipped') = 0)
   and a.parent_obj = object_id('表名')

 

4.查询出所有的递增字段

select name, object_name(id) as tablename
  from syscolumns
 where COLUMNPROPERTY(id, name, 'IsIdentity') = 1

 

5.查询存储过程

select (CASE a.xtype
         WHEN 'p' THEN
          '存储过程'
       end) as lx,
       a.name,
       b.text
  from sysobjects a
  left outer join syscomments b on a.id = b.id
 where xtype = 'p'

 

6.查询视图
select (CASE a.xtype
         WHEN 'v' THEN
          '视图'
       end) as lx,
       a.name,
       b.text
  from sysobjects a
  left outer join syscomments b on a.id = b.id
 where xtype = 'v'

 

 

7.获取表的基本字段属性

SELECT syscolumns.name,
       systypes.name,
       syscolumns.isnullable,
       syscolumns.length
  FROM syscolumns, systypes
 WHERE syscolumns.xusertype = systypes.xusertype
   AND syscolumns.id = object_id('表名')

 

 

8.查询字段默认值。

select  a.XTYPE,   OBJECT_NAME(parent_obj) AS TABLENAME,D.NAME AS COLNAME,C.colid, b.TEXT,C.STATUS
  from sysobjects a , syscomments B, sysconstraints C ,SYSCOLUMNS D
 where (a.xtype = 'D' AND OBJECTPROPERTY(a.id, N'IsMSShipped') = 0)
   AND (A.id = B.id)
   AND (A.ID=C.CONSTID AND A.parent_obj=C.ID AND C.status  = 2069)
   AND (C.ID=D.ID AND C.COLID=D.COLID)
   --and a.parent_obj = object_id('表名')
ORDER BY A.parent_obj

 

 今天,发现Sql server 2005的系统表全部都不见了,原来微软对它进行了升级,把系统表都隐藏了,全部更改为以系统视图的方式提供。

原创粉丝点击