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इसका विस्तार किया जाता है,CASEलेकिन जाहिर है कि एकCASEबयान में आप खुद को लिखते हैं कि आपWHENपरिस्थितियों में अधिक लचीले हो सकते हैं। के लिएISNULLबनामCOALESCEसंबंधित / नकल?