उल्लेख के लायक के लिए जाने का उपयोग करें कि दोनों के बीच प्रकार से निपटने के भी (देखें एक फर्क कर सकते हैं this related answer item (2))।
एक प्रश्न अशक्त तुलना लिखने के लिए एक शॉर्टकट का उपयोग करने की कोशिश करता है कहते हैं:
select * from SomeTable
where IsNull(SomeNullableBitField, -1) != IsNull(SomeOtherNullableBitField, -1);
जो क्योंकि पहले मामले में
select * from SomeTable
where coalesce(SomeNullableBitField, -1) != coalesce(SomeOtherNullableBitField, -1);
तुलना में अलग है, IsNull() प्रकार बलों होने के लिए थोड़ा (इसलिए -1 सच में परिवर्तित हो जाता है) जबकि दूसरा मामला एक int को दोनों को बढ़ावा देगा।
with input as
(
select convert(bit, 1) as BitOn,
convert(bit, 0) as BitOff,
convert(bit, null) as BitNull
)
select BitOn,
BitOff,
BitNull,
IsNull(BitOn, -1) IsNullBitOn, -- true
IsNull(BitOff, -1) IsNullBitOff, -- false
IsNull(BitNull, -1) IsNullBitNull, -- true, converts the -1 to bit
coalesce(BitOn, -1) CoalesceBitOn, -- 1
coalesce(BitOff, -1) CoalesceBitOff, -- 0
coalesce(BitNull, -1) CoalesceBitNull -- -1
from input;
प्रश्न पर ही एक ही टिप्पणी/लिंक (@ मार्टिन स्मिथ) है।
[COALESCE प्रलेखन] (http://msdn.microsoft।com/en-us/library/ms190349.aspx) में यह नोट है: ISNULL और COALESCE हालांकि समकक्ष, अलग-अलग व्यवहार कर सकते हैं। गैर-शून्य पैरामीटर वाले ISNULL से जुड़ी एक अभिव्यक्ति को पूर्ण नहीं माना जाता है, जबकि गैर-शून्य पैरामीटर वाले COALESCE से जुड़े अभिव्यक्ति को शून्य माना जाता है ... –
'ISNULL' परिणाम को पहली अभिव्यक्ति के डेटाटाइप पर भी सहारा देगा [ जैसा कि यहां दिखाया गया है] (http://haacked.com/archive/2005/01/21/difference-between-isnull-and-coalesce.aspx) –
यह आलेख अंतर को बहुत अच्छी तरह से बताता है ... http: // sqlmag .com/t-sql/coalesce-vs-isnull –