आपके विचार के बाद के बारे में।
SQL सर्वर 2012 में TRY_CONVERT
का परिचय दिया गया है
इस जरूरत के लिए। तो निम्न क्वेरी NULL
लौटाएगी त्रुटि के बजाय।
SELECT TRY_CONVERT ( FLOAT, 'Fish')
सीरियल प्लान के साथ भी इस बात की कोई गारंटी नहीं है कि WHERE
क्लॉज SELECT
. से पहले होगा मूल्यांकन किया जाता है। जैसा बताया गया है इस ब्लॉग पोस्ट में
SQL सर्वर 2005 के बाद से यह पिछले संस्करणों की तुलना में अधिक होने की संभावना है। SQL में डेटाबेस इंजन सुविधाओं में व्यवहार परिवर्तन सर्वर 2005
विशेष रूप से इसे इस प्रकार कहते हैं।
इस व्यवहार के बारे में अधिक चर्चा क्रेग फ्रीडमैन द्वारा एक और अच्छी ब्लॉग पोस्ट में है रूपांतरण और अंकगणित त्रुटियां .
2012 से पहले के संस्करणों और TRY_CONVERT
. पर आपको CAST AS FLOAT
को लपेटना होगा एक CASE
. में बयान। उदा.
SELECT CASE WHEN ISNUMERIC(Col)=1 THEN CAST(Col AS FLOAT) END AS Col
FROM Table
WHERE ISNUMERIC(Col)=1
यह अभी भी आपको ISNUMERIC
. के रूप में त्रुटियाँ प्राप्त करने से रोकने के लिए पूरी तरह से गारंटीकृत नहीं है केवल यह जांचता है कि मान विशेष रूप से फ्लोट करने के बजाय संख्यात्मक डेटाटाइप में से एक को डाला जाएगा असफल होने वाले इनपुट का एक उदाहरण '.'
CASE
ऑनलाइन किताबों में ज्यादातर शॉर्ट सर्किट के लिए प्रलेखित है (यहां कुछ अपवादों पर चर्चा की गई है
)
आप इसके बारे में कनेक्ट आइटम में अतिरिक्त चर्चा/शिकायतें भी पा सकते हैं SQL सर्वर को अतार्किक त्रुटियाँ नहीं उठानी चाहिए और ए>इसी तरह के मुद्दे की अच्छी व्याख्या SQLKiwi द्वारा