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

来源:互联网 发布:网络磁盘怎么断开 编辑:程序博客网 时间:2024/06/05 13:23

/*

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 

原创粉丝点击