2012-02-01 21 views
5

テーブルに応じて変数の宣言を動的に生成したい。タイプがintnullの場合のSqlのcase文

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 

答えて

14

CASE x WHEN null THENCASE 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' 
+0

は、これは完璧な作品!ありがとう – jcvegan

1

Coalesce

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'