2012-02-01 9 views
5

मैं तालिका के आधार पर गतिशील रूप से चर की घोषणा उत्पन्न करना चाहता हूं। मेरा मतलब है, मैं एक तालिका के चर घोषित करने के लिए चाहते हैं, प्रत्येक चर अपने स्तंभ के रूप में एक ही प्रकार मैं ऐसा ही कुछ कर रहा हूँ, लेकिन परिणाम ही काम करता है होना चाहिए अगर प्रकार किसी पूर्णांकएसक्यूएल केस स्टेटमेंट जब शून्य नहीं है

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 रूप में ही है। लेकिन कुछ भी इस तरह से शून्य के बराबर नहीं है। इसका मतलब है कि आप हमेशा अपने केस स्टेटमेंट का ईएलएसई हिस्सा प्राप्त कर रहे हैं। और इसका मतलब है कि आप नल के साथ एक स्ट्रिंग को संयोजित करने की कोशिश कर रहे हैं, जो हमेशा नल उत्पन्न करता है।

आप 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' 
संबंधित मुद्दे