jcv*_*gan 5 sql sql-server sql-server-2005 sql-server-2008
我想根据表动态生成变量声明.我的意思是,我想声明一个表的变量,每个变量必须与它的列相同类型我正在做类似的事情,但结果只有在类型不是int时才有效
Select 'Declare @Doc' + COLUMN_NAME + ' '+DATA_TYPE+case(CHARACTER_MAXIMUM_LENGTH) when Null then ' ' else '(' +convert(varchar(12),CHARACTER_MAXIMUM_LENGTH) + ')' end
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'Documentos'
Run Code Online (Sandbox Code Playgroud)
我的结果就是这个
(No column name)
NULL
Declare @DocSerie varchar(5)
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
Declare @DocImporteLetras varchar(255)
Declare @DocMotivos text(2147483647)
NULL
Declare @DocDocumentosReferencia varchar(255)
NULL
NULL
Declare @DocAuditoriaIPC varchar(40)
NULL
NULL
Declare @DocAuditoriaIPM varchar(40)
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
Run Code Online (Sandbox Code Playgroud)
Mat*_*lie 14
CASE x WHEN null THEN是一样的CASE WHEN x = null THEN.但是没有任何东西以这种方式等于null.这意味着您总是获得CASE语句的ELSE部分.这意味着您正在尝试将字符串与NULL连接,这总是会产生NULL.
你需要CASE WHEN x IS NULL THEN......
SELECT
'Declare @Doc'
+ COLUMN_NAME + ' '
+ DATA_TYPE
+ CASE WHEN (CHARACTER_MAXIMUM_LENGTH) IS Null then ' ' else '(' convert(varchar(12),CHARACTER_MAXIMUM_LENGTH) + ')' end
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'Documentos'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47846 次 |
| 最近记录: |