SQL SERVER 系统表应用

    技术2022-05-20  63

     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的系统表全部都不见了,原来微软对它进行了升级,把系统表都隐藏了,全部更改为以系统视图的方式提供。


    最新回复(0)