在WEB开发时,经常需要依据数据库表中的字段建立相应的输入控件,来获取输入的数据。每次都需要按字段来敲,显然太低效,而且容易出错。这里提供一个SQL脚本生成相应输入控件的方法。
USE DBDemo DECLARE @TEMP_TABLE_NAME NVARCHAR(512) DECLARE @WIDTH NVARCHAR(50) SET @TEMP_TABLE_NAME='Stuff' SET @WIDTH='200' SELECT '<f:'+TOKEN+' runat="server" ID="'+TOKEN+'_'+COLUMN_NAME+'" Label="' --没有描述的字段,使用COLUMN_NAME作为Label +CAST(CASE WHEN LEN(CAST(REMARK AS NVARCHAR(150)))<=0 THEN COLUMN_NAME WHEN LEN(CAST(ISNULL(REMARK,'') AS NVARCHAR(150)))<=0 THEN COLUMN_NAME ELSE REMARK END AS NVARCHAR(150) ) +'" '+' Width="'+@WIDTH+'"'+'></f:'+TOKEN+'>' AS DATA --标记串 --,TABLE_NAME,COLUMN_NAME,DATA_TYPE,TOKEN,EXTEND_STR,REMARK FROM ( SELECT TEMP_SCHEMA_COLUMNS.TABLE_NAME ,--AS '表名', TEMP_SCHEMA_COLUMNS.COLUMN_NAME ,--AS '列名', TEMP_SCHEMA_COLUMNS.DATA_TYPE ,--AS '类型', TEMP_EXTENDED_PROPERTIES.value AS REMARK ,--AS '描述', ( CASE WHEN TEMP_SCHEMA_COLUMNS.DATA_TYPE='int' THEN 'NumberBox' WHEN TEMP_SCHEMA_COLUMNS.DATA_TYPE='numeric' THEN 'NumberBox' WHEN TEMP_SCHEMA_COLUMNS.DATA_TYPE='smallint' THEN 'NumberBox' WHEN TEMP_SCHEMA_COLUMNS.DATA_TYPE='datetime' THEN 'DatePicker' WHEN TEMP_SCHEMA_COLUMNS.DATA_TYPE='bit' THEN 'CheckBox' ELSE 'TextBox' END ) AS TOKEN,--标记 ( CASE WHEN TEMP_SCHEMA_COLUMNS.DATA_TYPE='int' THEN 'DecimalPrecision="0"' WHEN TEMP_SCHEMA_COLUMNS.DATA_TYPE='smallint' THEN 'DecimalPrecision="0"' ELSE '' END ) AS EXTEND_STR --特殊属性标记串 FROM ( ( SELECT TEMP_TABLES.name AS table_name, TEMP_COLUMNS.name AS column_name, TEMP_COLUMNS.id AS table_id, TEMP_COLUMNS.colid AS column_id FROM (SELECT * FROM sysobjects WHERE type='U') AS TEMP_TABLES INNER JOIN (SELECT * FROM syscolumns ) AS TEMP_COLUMNS ON TEMP_TABLES.id=TEMP_COLUMNS.id ) AS TEMP_TABLE_COLUMNS INNER JOIN ( select TABLE_NAME,COLUMN_NAME,DATA_TYPE from information_schema.columns ) AS TEMP_SCHEMA_COLUMNS ON TEMP_SCHEMA_COLUMNS.TABLE_NAME=TEMP_TABLE_COLUMNS.table_name AND TEMP_SCHEMA_COLUMNS.COLUMN_NAME=TEMP_TABLE_COLUMNS.column_name FULL JOIN ( SELECT value,major_id,minor_id FROM sys.extended_properties ) AS TEMP_EXTENDED_PROPERTIES ON TEMP_TABLE_COLUMNS.table_id=TEMP_EXTENDED_PROPERTIES.major_id AND TEMP_TABLE_COLUMNS.column_id=TEMP_EXTENDED_PROPERTIES.minor_id ) WHERE TEMP_SCHEMA_COLUMNS.TABLE_NAME=@TEMP_TABLE_NAME ) AS TEMP_TABLE
说明:
1.DBDemo是数据库名称,依实际情况指定。
2.参数@TEMP_TABLE_NAME为相生成输入控件的数据库表名,依实际情况指定。这里是Stuff。
3.参数@WIDTH为控件的宽度,依实际情况指定。这里是200。
4.TOKEN为依据字段类型生成相应的标记。实际使用中,可能对应的标记不太准确,请依使用情况作出调整。
5.EXTEND_STR是特殊属性标记串。这里对NumberBox控件中,为int和smallint限定小数位数为0.即DecimalPrecision="0"。
6.控件中的Label,以字段的描述作为首选,如果没有字段描述的,则使用字段名。
生成的标记如下图
Web页面中使用如下图
生成的效果图如下图
转载请注明出处http://blog.csdn.net/xxdddail/article/details/37877691