最近想起来做一个项目代码生成器,直接生成底层代码..
这免不了要先行读取数据库已有的信息..
废话不多说..开整..
SELECT NAME FROM MASTER..SYSDATABASES --读取所有库
上边语句只得到单表单列..里边就全是数据库的名字..
然后选择数据库后..按此数据库连接重新链接数据库..执行以下语句
SELECT NAME FROM SYSOBJECTS WHERE TYPE=‘U‘ --读取所有表
上边语句依然是得到的单表单列,存储的值全不是当前选择的数据库中的表
用户选择..得到表名..
SELECT SC.Name --查询【列名】【类型】【长度】【描述】 ,[TYPE] = ST.Name + CASE ST.user_type_id WHEN 41 THEN ‘(‘+CAST(SC.scale AS VARCHAR) +‘)‘ -- time WHEN 42 THEN ‘(‘+CAST(SC.scale AS VARCHAR) +‘)‘ -- datetime2 WHEN 43 THEN ‘(‘+CAST(SC.scale AS VARCHAR) +‘)‘ -- datetimeoffset WHEN 106 THEN ‘(‘+CAST(SC.precision AS VARCHAR)+‘,‘+ CAST(SC.scale AS VARCHAR) +‘)‘ -- decimal WHEN 108 THEN ‘(‘+CAST(SC.precision AS VARCHAR)+‘,‘+ CAST(SC.scale AS VARCHAR) +‘)‘ -- numeric WHEN 165 THEN ‘(‘+ISNULL(CAST(NULLIF(SC.max_length,-1) AS VARCHAR),‘max‘) +‘)‘ -- varbinary WHEN 167 THEN ‘(‘+ISNULL(CAST(NULLIF(SC.max_length,-1) AS VARCHAR),‘max‘) +‘)‘ -- varchar WHEN 173 THEN ‘(‘+ISNULL(CAST(NULLIF(SC.max_length,-1) AS VARCHAR),‘max‘) +‘)‘ -- binary WHEN 175 THEN ‘(‘+ISNULL(CAST(NULLIF(SC.max_length,-1) AS VARCHAR),‘max‘) +‘)‘ -- char WHEN 231 THEN CASE SC.max_length WHEN -1 THEN ‘(max)‘ ELSE ‘(‘+ISNULL(CAST(NULLIF(SC.max_length / 2,-1) AS VARCHAR),‘max‘) +‘)‘ -- nvarchar END WHEN 239 THEN ‘(‘+ISNULL(CAST(NULLIF(SC.max_length,-1) AS VARCHAR),‘max‘) +‘)‘ -- nchar ELSE ‘‘ END ,CASE WHEN SC.Is_Nullable = 0 THEN ‘NOT NULL‘ --是否允许为空 WHEN SC.Is_Nullable = 1 THEN ‘NULL‘ ELSE ‘UNKNOWN‘ END IsNullable ,(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 = SC.NAME) Description --SO.NAME表名、SC.NAME列名 FROM SYS.COLUMNS SC,SYS.TYPES ST,SYS.SYSOBJECTS SO --列名信息和表结构信息 WHERE SC.user_type_id = ST.user_type_id AND SC.object_id = SO.ID AND SO.XTYPE=‘U‘ AND SO.NAME=‘写入表名‘
上边的语句是从网上复制过来的..先谢过那位大神了..
在语句中只要在最后写入表名..即可得到一张四列的表..分别是 字段名/字段类型/是否为空/备注
这四个东西基本上就是生成代码的最重要四个元素了..缺一不可..
在之后就是循环就好了..循环生成读模板..绑数据..
时间: 2024-10-11 01:32:08