2012-02-01 14 views
5

Desidero generare la dichiarazione delle variabili dinamicamente in base alla tabella. Voglio dire, voglio dichiarare le variabili di una tabella, ogni variabile deve essere dello stesso tipo come la sua colonna che sto facendo una cosa del genere, ma il risultato funziona solo se il tipo non è un intDichiarazione caso SQL quando non è nullo

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' 

e il mio risultato è questo

(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 

risposta

14

CASE x WHEN null THEN è lo stesso di CASE WHEN x = null THEN. Ma niente è uguale a null in questo modo. Ciò significa che ricevi sempre la parte ELSE della tua dichiarazione CASE. Ciò significa che stai tentando di concatenare una stringa con NULL, che restituisce sempre NULL.

È necessario CASE WHEN x IS NULL THEN invece ...

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

questo funziona perfetto! Grazie – 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' 
Problemi correlati