最近想起来做一个项目代码生成器,直接生成底层代码..
这免不了要先行读取数据库已有的信息..
废话不多说..开整..
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)
也可以用上述语句来单独获取表中的字段说明
在之后就是循环就好了..循环生成读模板..绑数据..写文件