सबसे पहले, यह एक "चमकदार डिजाइन मुद्दा" नहीं है। 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 कर रहा है। यह स्थिति बहुत खराब होती है जब कास्ट निहित होते हैं (और सैकड़ों कॉलम होते हैं)।