我想根据表动态生成变量声明。 我的意思是,我想声明一个表的变量,每个变量必须与其列的类型相同 我正在做类似的事情,但结果只有在类型不是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'
我的结果就是这个
(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
答案 0 :(得分: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'
答案 1 :(得分:2)
SELECT 'Declare @Doc'
+ COLUMN_NAME + ' '
+ DATA_TYPE + Coalesce('(' + CHARACTER_MAXIMUM_LENGTH + ')', '')
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'Documentos'
<强> Switch Case 强>
SELECT 'Declare @Doc'
+ COLUMN_NAME + ' '
+ DATA_TYPE
+ Case When CHARACTER_MAXIMUM_LENGTH Is Null Then '' Else '(' + Convert(Varchar, CHARACTER_MAXIMUM_LENGTH) + ')' End
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'Documentos'