Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

MSSQL कास्ट ([varcharColumn] to int) सेलेक्ट में निष्पादित हो जाता है, इससे पहले कि क्लॉज खराब मानों को फ़िल्टर करता है

सबसे पहले, यह एक "चमकदार डिजाइन मुद्दा" नहीं है। SQL आउटपुट की एक वर्णनात्मक भाषा है, न कि एक प्रक्रियात्मक भाषा जो निर्दिष्ट करती है कि कैसे प्रसंस्करण किया जा रहा है। सामान्य तौर पर, प्रसंस्करण के आदेश की कोई गारंटी नहीं है, और यह एक फायदा है। मैं कह सकता हूं कि एक डिज़ाइन समस्या है, लेकिन यह SQL कथनों में अपवादों के सामान्य संचालन के आसपास है।

SQL सर्वर दस्तावेज़ीकरण (http://msdn.microsoft.com/en-us/library/ms181765.aspx) के अनुसार, आप स्केलर एक्सप्रेशन के लिए CASE स्टेटमेंट के लिए मूल्यांकन के क्रम पर निर्भर कर सकते हैं . तो, निम्नलिखित कार्य करना चाहिए:

select (case when isnumeric(c.varcharColumn) = 1 then cast(c.varcharColumn as int) end)

या, "int" एक्सप्रेशन के करीब जाने के लिए:

select (case when isnumeric(c.varcharColumn) = 1 and c.varcharColumn not like '%.%' and c.varcharColumn not like '%e%'
             then cast(c.varcharColumn as int)
        end)

कम से कम आपका कोड एक स्पष्ट CAST कर रहा है। यह स्थिति बहुत खराब होती है जब कास्ट निहित होते हैं (और सैकड़ों कॉलम होते हैं)।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. प्रत्येक समूह की शीर्ष 1 पंक्ति प्राप्त करें

  2. तालिका में मूल्यों की लगातार घटनाओं की संख्या की गणना करें

  3. एसएसआईएस सी # 2012 स्क्रिप्ट कार्य WinSCPnet.dll का जिक्र करते हुए विफल रहता है जब SQL सर्वर एजेंट से अपवाद के साथ चलाया जाता है जिसे एक आमंत्रण के लक्ष्य द्वारा फेंक दिया गया है

  4. JDBC कनेक्शन SQL Server 2008 r2 से बिना किसी प्रतिक्रिया के हैंग हो जाता है

  5. एसक्यूएल:संचयी कॉलम और पंक्ति भर में योग