SQL सर्वर में कोई boolean
नहीं है। इसका मतलब है कि आप केवल IF (expression)
नहीं कह सकते हैं; आपको इसे किसी चीज़ से तुलना करना चाहिए, क्योंकि यह true
या false
को उसी अर्थ में वापस करता है जैसा कि आप शायद अन्य भाषाओं में उपयोग किए जाते हैं।
बस एक प्राथमिकता है, लेकिन मैं इसे इस तरह लिखने के लिए पसंद करेंगे:
IF ISNUMERIC('5675754674') = 1
BEGIN
...
END
एसक्यूएल सर्वर में कोई रास्ता नहीं है, 1 की तुलना से बचने के लिए अपने दूसरे उदाहरण के रूप में नहीं है।
के रूप में भी एक अलग रूप में आप ISNUMERIC()
की कमजोरियों के बारे में पता होना चाहिए - यह "सांख्यिक" और अन्य गैर-संख्यात्मक तार के एक मेजबान के इस तरह के .
, CHAR(9)
, e
, $
के रूप में मूल्यों के लिए झूठे सकारात्मक दे सकते हैं। आप अगर कुछ, एक पूर्णांक है, उदाहरण के लिए जानना चाहते हैं, बेहतर कहने के लिए:
IF '5675754674' NOT LIKE '%[^0-9]%'
BEGIN
...
END
लेकिन फिर भी है कि पूर्ण और मान्य परीक्षण नहीं है, क्योंकि यह मान > (2^32)-1
के लिए सच वापस आ जाएगी और यह नकारात्मक के लिए अवास्तविक लौटाते हैं मान।
ISNUMERIC()
को एक और नकारात्मक पक्ष यह है कि यह सच है, तो वापस आ जाएगी मूल्य किसी भी सांख्यिक प्रकार, जो के रूप में ही सब सांख्यिक प्रकार नहीं है की में बदला जा सकता है। अक्सर लोग ISNUMERIC()
के लिए परीक्षण करते हैं और फिर FLOAT
को SMALLINT
पर डालने का प्रयास करते हैं और रूपांतरण विफल हो जाता है।
SQL सर्वर 2012 में आपके पास TRY_CONVERT()
नामक एक नई विधि होगी जो NULL
लौटाती है यदि निर्दिष्ट डेटा प्रकार का रूपांतरण मान्य नहीं है।
स्रोत
2012-02-15 00:14:40