क्षमा करें अगर यह उपयुक्त नहीं है, लेकिन वास्तव में यह 'कैसे' की बजाय 'क्यों' है। यह सुनिश्चित नहीं है कि यह उपयुक्त है, लेकिन पूछने के लिए एक बेहतर जगह नहीं पता है और मैं नहीं सोच सकता कि Google को वाक्यांश कैसे प्राप्त किया जाए, जो मैं ढूंढ रहा हूं।आईएफ क्लॉज के एसक्यूएल मूल्यांकन
IF 'hell' = 'freezing over'
BEGIN
SELECT log(0)
END
उस कथन को देखें। ऐसी कोई दुनिया नहीं है जिसमें आईएफ खंड सत्य होगा। अगर मैं इसे चलाने का प्रयास करता हूं तो मुझे उम्मीद है कि एसक्यूएल आईएफ क्लॉज से आगे बढ़कर अंत तक चलेगा। इसके बजाय मुझे मिलता है:
An invalid floating point operation occurred.
यह विचित्र है। तो मुझे लगता है कि यह वही तरीका है जो एसक्यूएल यह काम करता है। इसके अलावा ...
IF 'hell' = 'freezing over'
BEGIN
SELECT 1/0
END
यहां कोई त्रुटि नहीं है। आईएफ खंड में बयान अभी भी एक त्रुटि उत्पन्न करना चाहिए। क्या कोई यह समझा सकता है कि यह क्यों नहीं हो रहा है?
यह एसक्यूएल कैल्क्स के बड़े पैमाने पर सेट डीबगिंग करते समय आया, जहां EXP (SUM (LOG())) का उपयोग किसी खंड में डेटा जमा करने के लिए किया जाता है। मैं कोड को फिर से होने से रोकने के लिए बदल सकता हूं, लेकिन यह एक आईएफ खंड में कुछ क्यों मूल्यांकन कर रहा है जो पूरा नहीं हुआ है।
चीयर्स।
संपादित करें: अतिरिक्त मनोरंजन। पकड़ने की कोशिश? Pffft
IF 1=2
BEGIN
BEGIN TRY
SELECT SQRT(-1)
END TRY
BEGIN CATCH
END CATCH
END
गैर गणितीय:
IF 1=2
BEGIN
SELECT SUBSTRING('hello',-1,-1)
END
एएनएसआई चेतावनियों ने कोई फर्क नहीं पड़ता, लेकिन यह वह लिंक है जो मुझे लगता है कि मुझे बहुत धन्यवाद है :) –
आपका स्वागत है। ANSI_WARNINGS द्वारा मेरा मतलब था कि यदि किसी भी समय "सेट ansi_warnings off" जारी किया गया था तो आपको शून्य त्रुटि से विभाजित नहीं दिखाई देगा। चूंकि कंपाइलर पहले से कभी एएनएसआई_वार्निंग्स ध्वज की स्थिति को पहले से नहीं जानता है, जब संकलित क्वेरी चलती है, तो उसे किसी भी फोल्ड अभिव्यक्ति को अनदेखा करना चाहिए जो संकलन समय पर शून्य अपवाद द्वारा विभाजित करता है क्योंकि यह वांछित व्यवहार की भविष्यवाणी नहीं कर सकता है। (यदि ansi_warnings हमेशा 1/0 बंद होने की गारंटी दी जाती है तो NULL में गुना होगा) –