2012-11-05 4 views
12

मैं एक सवालहम एसक्यूएल सर्वर 2008 में सभी कॉलम नामों के लिए ISNULL का उपयोग कैसे कर सकते हैं?

मैं google को इसे करने की कोशिश है, लेकिन लगता है कि वे *

पसंद नहीं है मैं एसक्यूएल सर्वर का उपयोग कर रहा 2008

मैं निम्नलिखित डेटाबेस तालिका है:

P_Id ProductName UnitPrice UnitsInStock UnitsOnOrder 
------------------------------------------------------------------------ 
    1 Jarlsberg 10.45     16 15 
    2 Mascarpone Null     23 NULL 
    3 Gorgonzola 15.67     9 20 

मैं जानता हूँ कि मैं एक तार के साथ null को बदलने के लिए की जरूरत है मैं करता हूँ:

SELECT ISNULL(UnitsOnOrder,'No Data') FROM tbl 

प्रश्न

  • मैं कैसे उपयोग कर सकते हैं ISNULL() बहु स्तंभ नाम के साथ?
  • यह संभव के साथ *

तरह

SELECT ISNULL(* , 'NO data') FROM tbl 

मुझे लगता है कि क्योंकि डेटाप्रकार की, आप INT डेटाप्रकार स्ट्रिंग पारित नहीं हो सकता तो कैसे कर सकते हैं इस मुश्किल हो जाएगा इसका इस्तेमाल करने के लिए है मैं इसे भी

अद्यतन

ठीक है अगर मैं ISNULL( का उपयोग करता हूं) int के डेटाटाइप के साथ यह 0 लौटाएगा जो मेरे लिए एक मूल्य होगा, मैं इसके बजाय खाली स्ट्रिंग कैसे पास कर सकता हूं?

+2

नहीं लौटाएगा, आपको प्रत्येक कॉलम को अलग से सूचीबद्ध करना होगा। –

+0

आपको '*' का उपयोग करने की आवश्यकता क्यों है? यदि आपके पास फ़ील्ड सूची में कॉलम हैं तो यह आपके लिए काम नहीं करता है। –

+1

@MikaelEriksson वह चुनिंदा सूची में प्रत्येक कॉलम को अनावश्यक कॉल के साथ लपेटना नहीं चाहता है। एक लक्षण का इलाज करने की कोशिश कर रहा है, मुझे लगता है ... –

उत्तर

16

आप विभिन्न स्तंभों के लिए एक ही एसक्यूएल बयान में कई बार IsNull उपयोग कर सकते हैं, लेकिन आप प्रत्येक स्तंभ के लिए अलग से लिखना चाहिए:

SELECT 
    ISNULL(ProductName, 'No Data') AS ProductName, 
    ISNULL(CAST(UnitPrice AS NVARCHAR), 'No Data') AS UnitPrice, 
    ISNULL(CAST(UnitsInStock AS NVARCHAR), 'No Data') AS UnitsInStock, 
    ISNULL(CAST(UnitsOnOrder AS NVARCHAR), 'No Data') AS UnitsOnOrder 
FROM tbl 

आप एक गतिशील SQL क्वेरी का निर्माण कर रहे हैं, तो आप सैद्धांतिक रूप से एक इकट्ठा कर सकता है तालिका में कॉलम की सूची और प्रत्येक पर ISNULL के साथ एक क्वेरी उत्पन्न करें। उदाहरण के लिए:

DECLARE @SQL nvarchar(max) 

SET @SQL = 'SELECT ' 

SELECT @SQL = @SQL + 'ISNULL(CAST([' + sc.name + '] AS NVARCHAR), ''No Data'') AS [' + sc.name + '],' 
FROM sys.objects so 
INNER JOIN sys.columns sc ON sc.object_id = so.object_id 
WHERE so.name = 'tbl' 

-- Remove the trailing comma 
SELECT @SQL = LEFT(@SQL, LEN(@SQL) - 1) + ' FROM tbl' 

EXEC sp_sqlexec @SQL 

इस कोड को समस्याओं जब कोई nvarchar लिए टाइम स्टांप की तरह कुछ स्तंभ प्रकार परिवर्तित है, लेकिन यह तकनीक को दिखाता है।

ध्यान दें कि यदि आप किसी अन्य स्तंभ अगर एक मूल्य के रिक्त है लौटे दिया जाना चाहिए कि था, तो आप COALESCE अभिव्यक्ति इस तरह इस्तेमाल कर सकते हैं:

SELECT COALESCE(ProductName, P_Id) AS Product... 
1

इस प्रयास करें ...

IsNull (COALESCE (स्तम्भ 1, कॉलम 2), 'कोई डेटा नहीं')

आप हालांकि सभी कॉलम नामों में शामिल करने के लिए की आवश्यकता होगी, तो आप उपयोग नहीं कर सकते *

COALESCE रिटर्न में पहली गैर शून्य मान इसकी तर्क सूची इसलिए यदि वे सभी शून्य हैं तो यह शून्य

संबंधित मुद्दे