2012-02-01 29 views
5

Tabloya bağlı olarak dinamik olarak değişken bildirimi oluşturmak istiyorum. türü, bir intSql Durum Bildirimi ne zaman boş değil

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' 

değilse Ben bir tablonun değişkenleri bildirmek istiyorum demek her değişken böyle bir şey yapıyorum ama sonuç çalışır onun sütunu ile aynı türde olmalıdır ve benim sonuç bu

(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 

cevap

14

CASE x WHEN null THENCASE WHEN x = null THEN aynı olmasıdır. Ama hiçbir şey bu şekilde null eşittir. Bu, her zaman CASE ifadenizin ELSE bölümünü aldığınız anlamına gelir. Ve bu, her zaman NULL olan NULL ile bir dizeyi birleştirmeye çalıştığınız anlamına gelir.

yerine CASE WHEN x IS NULL THEN ihtiyaç

...

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

Bu mükemmel çalışıyor! Teşekkürler – 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' 
İlgili konular