आप इन दोनों विधियों का उपयोग कर सकते हैं लेकिन इनमें अंतर हैं:
SELECT ISNULL(col1, 0 ) FROM table1
SELECT COALESCE(col1, 0 ) FROM table1
तुलना तुलना () और ISNULL ():
ISNULL फ़ंक्शन और COALESCE अभिव्यक्ति का एक समान उद्देश्य है, लेकिन अलग तरह से व्यवहार कर सकते हैं।
क्योंकि ISNULL एक फ़ंक्शन है, इसका मूल्यांकन केवल एक बार किया जाता है। जैसा कि ऊपर वर्णित है, COALESCE अभिव्यक्ति के लिए इनपुट मानों का मूल्यांकन कई बार किया जा सकता है।
परिणामी अभिव्यक्ति का डेटा प्रकार निर्धारण अलग है। ISNULL पहले पैरामीटर के डेटा प्रकार का उपयोग करता है, COALESCE CASE अभिव्यक्ति नियमों का पालन करता है और उच्चतम वरीयता के साथ डेटा प्रकार का मान लौटाता है।
परिणाम अभिव्यक्ति की पूर्णता ISNULL और COALESCE के लिए अलग है। ISNULL रिटर्न वैल्यू को हमेशा NULLable नहीं माना जाता है (रिटर्न वैल्यू को गैर-अशक्त माना जाता है) जबकि गैर-शून्य मापदंडों के साथ COALES को NULL माना जाता है। तो भाव ISNULL (NULL, 1) और COALESCE (NULL, 1) हैं, हालांकि समतुल्य अलग-अलग अशक्तता मान हैं। इससे फर्क पड़ता है कि यदि आप इन अभिव्यक्तियों का उपयोग गणना किए गए कॉलम में कर रहे हैं, तो महत्वपूर्ण अवरोध पैदा कर रहे हैं या स्केलर यूडीएफ निर्धारक का रिटर्न मूल्य बना रहे हैं ताकि इसे निम्न उदाहरण में दिखाए अनुसार अनुक्रमित किया जा सके।
- यह कथन विफल रहता है क्योंकि प्राथमिक कुंजी NULL मानों को स्वीकार नहीं कर सकता है - और Col2 के लिए COALESCE अभिव्यक्ति की अशक्तता - NULL का मूल्यांकन करता है।
CREATE TABLE #Demo
(
col1 integer NULL,
col2 AS COALESCE(col1, 0) PRIMARY KEY,
col3 AS ISNULL(col1, 0)
);
- यह कथन सफल होता है क्योंकि - ISNULL फ़ंक्शन की अशक्तता NULL NULL का मूल्यांकन नहीं करती है।
CREATE TABLE #Demo
(
col1 integer NULL,
col2 AS COALESCE(col1, 0),
col3 AS ISNULL(col1, 0) PRIMARY KEY
);
ISNULL और COALESCE के लिए मान्यताएं भी अलग-अलग हैं। उदाहरण के लिए, ISNULL के लिए एक NULL मान int में परिवर्तित हो जाता है जबकि COALESCE के लिए, आपको एक डेटा प्रकार प्रदान करना होगा।
ISNULL केवल 2 पैरामीटर लेता है जबकि COALESCE मापदंडों की एक परिवर्तनीय संख्या लेता है।
यदि आपको और अधिक जानने की आवश्यकता है, तो यहाँ msdn का पूरा दस्तावेज़ है।