获取SQLSERVER所有库 所有表 所有列 所有字段信息

最近想起来做一个项目代码生成器,直接生成底层代码..

这免不了要先行读取数据库已有的信息..

废话不多说..开整..

SELECT NAME FROM MASTER..SYSDATABASES  --读取所有库

上边语句只得到单表单列..里边就全是数据库的名字..

然后选择数据库后..按此数据库连接重新链接数据库..执行以下语句

SELECT NAME FROM SYSOBJECTS WHERE TYPE='U'  --读取所有表

上边语句依然是得到的单表单列,存储的值全不是当前选择的数据库中的表


用户选择..得到表名..

SELECT CAST(value AS nvarchar(200)) as tableDescription FROM fn_listextendedproperty ('MS_Description', 'user', 'dbo', 'table', '写入表名', default, default)

可以使用上述语句来获取表的扩展属性表说明字段  譬如   "用户表"  

结合之后得到以下语句..可以直接把表名和表说明一起读出

SELECT NAME,(SELECT CAST(value AS nvarchar(200)) as tableDescription FROM fn_listextendedproperty ('MS_Description', 'user', 'dbo', 'table', SO.NAME, default, default)) FROM SYSOBJECTS AS SO WHERE TYPE='U' 
Select 
SCOL.NAME,                    --列名
SCOL.ISNULLABLE,            --是否为NULL
SCOL.PREC,                    --长度
STYPE.NAME AS [TYPE] ,        --字段数据类型
(SELECT SYS.EXTENDED_PROPERTIES.VALUE FROM SYSCOLUMNS   
INNER JOIN SYS.EXTENDED_PROPERTIES ON SYSCOLUMNS.ID = SYS.EXTENDED_PROPERTIES.MAJOR_ID   
AND SYSCOLUMNS.COLID = SYS.EXTENDED_PROPERTIES.MINOR_ID   
INNER JOIN SYSOBJECTS ON SYSCOLUMNS.ID = SYSOBJECTS.ID   
WHERE SYSOBJECTS.NAME = SO.NAME AND SYSCOLUMNS.NAME = SCOL.NAME) AS NOTES   --字段说明文字

from SYSCOLUMNS AS SCOL
LEFT JOIN SYSOBJECTS SO ON SO.ID=SCOL.ID 
LEFT JOIN SYSTYPES AS STYPE ON STYPE.xtype=SCOL.xtype
Where 
SCOL.ID=OBJECT_ID('写入表名')
AND STYPE.NAME<>'SYSNAME'   --最后这个我也没搞明白  是自己加上的  有时候同一个字段会出来两行数据 其中一个是sysname

  

上边的语句是自己写的..自己测试结果是正确的..如有不对..请多多指正批评

在语句中只要在最后写入表名..即可得到一张四列的表..分别是 字段名/字段类型/是否为空/备注

这四个东西基本上就是生成代码的最重要四个元素了..缺一不可..

加注:

SELECT objname,CAST(value AS nvarchar(200)) as fieldDescription FROM fn_listextendedproperty ('MS_Description', 'user', 'dbo', 'table', '写入表名' , 'column', default)

也可以用上述语句来单独获取表中的字段说明

在之后就是循环就好了..循环生成读模板..绑数据..写文件

原文地址:https://www.cnblogs.com/iiwen/p/4683439.html