कैसे इस बारे में - जैसा कि इत्ज़िक बेन-गण द्वारा मुझे बताया गया है, जिसे इसके बारे में जैम लाफार्ज ने बताया था ?
DECLARE @i INT = 1;
SELECT CASE WHEN @i = 1 THEN 1 ELSE MIN(1/0) END;
नतीजा:
Msg 8134, Level 16, State 1, Line 2
Divide by zero error encountered.
निश्चित रूप से तुच्छ वर्कअराउंड हैं, लेकिन अभी भी बिंदु यह है कि हमेशा बाएं से दाएं मूल्यांकन / शॉर्ट-सर्कुलेटिंग की गारंटी CASE
नहीं देता है। मैंने यहां बग की सूचना दी और इसे "डिजाइन द्वारा" बंद कर दिया गया। पॉल व्हाइट ने बाद में इस कनेक्ट आइटम को दायर किया , और इसे फिक्स्ड के रूप में बंद कर दिया गया। इसलिए नहीं कि यह प्रति सेक्यूट तय किया गया था, बल्कि इसलिए कि उन्होंने बुक्स ऑनलाइन को उस परिदृश्य के अधिक सटीक विवरण के साथ अपडेट किया, जहां एग्रीगेट किसी एक्सप्रेशन के मूल्यांकन क्रम को बदल सकते हैं । मैंने हाल ही में यहाँ इस बारे में और अधिक ब्लॉग किया है ।CASE
केवल एक परिशिष्ट संपादित करें , जबकि मैं मानता हूं कि ये बढ़त के मामले हैं, कि ज्यादातर समय आप बाएं से दाएं मूल्यांकन और शॉर्ट-सर्कुलेटिंग पर भरोसा कर सकते हैं, और ये ऐसे कीड़े हैं जो प्रलेखन का विरोध करते हैं और अंततः तय हो जाएंगे ( यह निश्चित नहीं है - बार्ट डंकन के ब्लॉग पोस्ट पर अनुवर्ती बातचीत देखें कि क्यों), मुझे असहमत होना पड़ता है जब लोग कहते हैं कि कुछ हमेशा सच होता है, भले ही एक ही किनारे का मामला हो जो इसे नापसंद करता हो। यदि इत्ज़िक और अन्य लोग इस तरह के एकान्त कीड़े पा सकते हैं, तो यह कम से कम संभावना के दायरे में बनाता है कि अन्य कीड़े भी हैं। और जब से हम ओपी के बाकी प्रश्न नहीं जानते हैं, हम निश्चित रूप से यह नहीं कह सकते हैं कि वह इस शॉर्ट-सर्किटिंग पर भरोसा करेगा लेकिन अंत में इसे काट दिया जाएगा। तो मेरे लिए, सुरक्षित उत्तर है:
यद्यपि आप आमतौर पर CASE
बाएं से दाएं और शॉर्ट-सर्किट का मूल्यांकन करने के लिए भरोसा कर सकते हैं , जैसा कि प्रलेखन में वर्णित है, यह कहना सही नहीं है कि आप हमेशा ऐसा कर सकते हैं। इस पृष्ठ पर दो प्रदर्शित मामले हैं जहां यह सत्य नहीं है, और न ही बग किसी भी SQL सर्वर के सार्वजनिक रूप से उपलब्ध संस्करण में तय किया गया है।
यहां EDIT एक और मामला है (मुझे ऐसा करने से रोकने की जरूरत है) जहां कोई CASE
अभिव्यक्ति उस क्रम में मूल्यांकन नहीं करती है जिसकी आप उम्मीद करते हैं, भले ही कोई भी एग्रीगेट शामिल न हो।
CASE
हमेशा बाएं से दाएं और हमेशा शॉर्ट सर्किट का मूल्यांकन करें )।