केस बनाम इस्नाल बनाम कोलेस


9

मैं SQL सर्वर 2012 परीक्षा के लिए दस्तावेज के माध्यम से पढ़ रहा हूं और मैंने निम्नलिखित बिंदु देखा:

केस बनाम इस्नाल बनाम कोलेस

अब, मैं जानता हूँ कि कैसे हर एक का उपयोग करने के लेकिन मैं नहीं जानता कि जब हर एक का उपयोग करें। कृपया कुछ निकाय स्पष्ट कर सकते हैं। धन्यवाद।

Ps। कृपया हमें परीक्षा के प्रश्नों का टैग मिल सकता है?


2
COALESCEइसका विस्तार किया जाता है, CASEलेकिन जाहिर है कि एक CASEबयान में आप खुद को लिखते हैं कि आप WHENपरिस्थितियों में अधिक लचीले हो सकते हैं। के लिए ISNULLबनाम COALESCE संबंधित / नकल?
मार्टिन स्मिथ

संबंधित मैं सहमत हूँ। लेकिन नहीं। टिप्पणी के लिए धन्यवाद :)
स्टुअर्ट ब्लैकलर

जवाबों:


10

ISNULL - केवल SQL सर्वर में उपलब्ध है। एक दूसरे के साथ पूर्ण मान के परीक्षण और प्रतिस्थापन के लिए अनुमति देता है।

COALESCE - ANSI मानक। तर्कों की एक चर लंबाई सेट में पहले गैर-शून्य मान के साथ एक पूर्ण मान के परीक्षण और प्रतिस्थापन की अनुमति देता है। यह ध्यान रखना महत्वपूर्ण है कि इसमें डेटा प्रकार की पूर्वनिर्धारणता कारक है

-- Conversion failed when converting the varchar value 'a' to data type int
SELECT COALESCE(CAST(NULL AS varchar(10)), 'a', 1) 
-- Returns 1
SELECT COALESCE(CAST(NULL AS varchar(10)), 1, 'a')

उपरोक्त उदाहरण में, 'ए' पहला गैर-शून्य मान है लेकिन वर्ण डेटा में पूर्णांक की तुलना में कम पूर्वता है।

ISNULL बनाम COALESCE के बीच एक अन्य विचार यह है कि ISNULL का परिणाम NULL नहीं है, जबकि COALESCE कॉल का परिणाम NULLable है। JRJ की पोस्ट ISNULL () <> COALESCE () देखें, जबकि यह एक मामूली बात लग सकती है, क्वेरी ऑप्टिमाइज़र एक स्तंभ की अशक्तता के आधार पर विभिन्न योजनाएं बना सकता है।

आप आसानी से DMO के माध्यम से चलाकर अपने isnull / सम्मिलित / मामला अभिव्यक्ति की nullability परीक्षण कर सकते हैं sys.dm_exec_describe_first_result_set

-- these all evaluate to not nullable (is_nullable = 0) because I'm not clever enough
DECLARE @sql nvarchar(4000) = N'
SELECT ISNULL(NULL, 1) AS I
, COALESCE(NULL, 1) AS C
, CASE WHEN NULL = NULL THEN NULL ELSE 1 END AS C1
'
SELECT
    DMO.*
FROM
    sys.dm_exec_describe_first_result_set(@sql, NULL, 0) AS DMO

मामले - एक एएनएसआई मानक स्केलर फ़ंक्शन भी। मैं पिछले दो से अधिक मामले का उपयोग करके देखूंगा जब मेरे पास एक परीक्षण है जिसे एक साधारण स्केलर में व्यक्त नहीं किया जा सकता है लेकिन यह एक बहुत ही कमजोर उत्तर है, मैं मानता हूं।


इतनी जल्दी पूरा जवाब देने के लिए धन्यवाद। मुझे इस बात का अंदाजा नहीं था कि पूर्वता का क्रम मायने रखता है COALESCE। धन्यवाद फिर से
स्टुअर्ट ब्लैकलर

1
CASEतकनीकी रूप से एक अभिव्यक्ति है, एक फ़ंक्शन नहीं है।
ypercube y

1

ISNULL आपको 1 पुनर्खरीद वापस करने के लिए अभिरुचि देता है, COALESCE COALESCE(v1,v2,v3,v4,v5) केवल एक मान तक सीमित नहीं है, यदि V5 एकमात्र मान है जो NULL नहीं है तो उसे वापस कर दिया जाएगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.