(转)sqlserver2005 读取数据库所有表及字段

    技术2022-05-19  21

    /*

    1.获取所有数据库:

    Select Name FROM Master..SysDatabases ORDER BY Name

    2.获取所有表名:

    Select Name FROM DatabaseName..SysObjects Where XType='U' ORDER BY Name

    XType='U':表示所有用户表;

    XType='S':表示所有系统表;

    3.获取所有字段名:

    Select Name FROM SysColumns Where id=Object_Id('TableName')

    */

     

    SELECT   

    表名             =  CASE  WHEN  A.COLORDER=1  THEN  D.NAME  ELSE  ' '  END, 

    表说明         =  CASE  WHEN  A.COLORDER=1  THEN  ISNULL(F.VALUE,' ')  ELSE  ' '  END, 

    字段序号     =  A.COLORDER, 

    字段名         =  A.NAME, 

    标识             =  CASE  WHEN  COLUMNPROPERTY(  A.ID,A.NAME,'ISIDENTITY ')=1  THEN  '√'ELSE  ' '  END, 

    主键             =  CASE  WHEN  EXISTS(Select  1  FROM  SYSOBJECTS  Where  XTYPE='PK '  AND  PARENT_OBJ=A.ID  AND  NAME  IN  ( 

    SELECT  NAME  FROM  SYSINDEXES  Where  INDID  IN( 

    SELECT  INDID  FROM  SYSINDEXKEYS  Where  ID  =  A.ID  AND  COLID=A.COLID)))  THEN  '√'  ELSE  ' '  END, 

    类型             =  B.NAME, 

    字段长度 =  A.LENGTH, 

    精度             =  COLUMNPROPERTY(A.ID,A.NAME,'PRECISION '), 

    小数位数     =  ISNULL(COLUMNPROPERTY(A.ID,A.NAME,'SCALE '),0), 

    允许空         =  CASE  WHEN  A.ISNULLABLE=1  THEN  '√'ELSE  ' '  END, 

    缺省值         =  ISNULL(E.TEXT,' '), 

    字段说明     =  ISNULL(G.[VALUE],' ') 

    FROM   

    SYSCOLUMNS  A 

    LEFT  JOINSYSTYPES  B   

       ON A.XUSERTYPE=B.XUSERTYPE 

    INNER  JOIN  SYSOBJECTS  D   

       ON A.ID=D.ID    AND  D.XTYPE='U '  AND    D.NAME<>'DTPROPERTIES ' 

    LEFT  JOINSYSCOMMENTS  E   

       ON A.CDEFAULT=E.ID 

    LEFT  JOINsys.extended_properties  G   

       ON A.ID=G.major_id  AND  A.COLID=G.minor_id     

    LEFT  JOINsys.extended_properties  F   

       ON D.ID=F.major_id  AND  F.minor_id=0 


    最新回复(0)