COALESCE और ISNULL की तुलना करना
ISNULL फ़ंक्शन और COALESCE व्यंजक का एक समान उद्देश्य है लेकिन अलग-अलग व्यवहार कर सकते हैं।
- चूंकि ISNULL एक फ़ंक्शन है, इसका मूल्यांकन केवल एक बार किया जाता है। जैसा कि ऊपर बताया गया है, COALESCE व्यंजक के लिए इनपुट मानों का मूल्यांकन कई बार किया जा सकता है।
- परिणामी अभिव्यक्ति का डेटा प्रकार निर्धारण अलग है। ISNULL पहले पैरामीटर के डेटा प्रकार का उपयोग करता है, COALESCE CASE अभिव्यक्ति नियमों का पालन करता है और उच्चतम प्राथमिकता के साथ डेटा प्रकार का मान लौटाता है।
- परिणाम अभिव्यक्ति की शून्यता ISNULL और COALESCE के लिए अलग है। TheISNULL वापसी मान को हमेशा न्यूलेबल नहीं माना जाता है (माना जाता है कि वापसी मान गैर-शून्य है) जबकि गैर-शून्य पैरामीटर वाले COALESCE को NULL माना जाता है। तो अभिव्यक्ति ISNULL(NULL, 1) andCOALESCE(NULL, 1) हालांकि समकक्ष में अलग-अलग अशक्तता मान हैं। इससे फर्क पड़ता है अगर आप इन एक्सप्रेशन्स का उपयोग इनकंप्यूटेड कॉलम में कर रहे हैं, मुख्य बाधाएँ बना रहे हैं या एक स्केलर UDF नियतात्मक का रिटर्न वैल्यू बना रहे हैं ताकि इसे निम्नलिखित उदाहरण में दिखाए अनुसार अनुक्रमित किया जा सके।
> USE tempdb;
> GO
> -- This statement fails because the PRIMARY KEY cannot accept NULL values
> -- and the nullability of the COALESCE expression for col2
> -- evaluates to NULL.
> CREATE TABLE #Demo ( col1 integer NULL, col2 AS COALESCE(col1, 0) PRIMARY KEY, col3 AS ISNULL(col1, 0) );
>
> -- This statement succeeds because the nullability of the
> -- ISNULL function evaluates AS NOT 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 पैरामीटर की एक चर संख्या लेता है।
स्रोत:बीओएल