SQL Server में सेलेक्ट स्टेटमेंट का लॉजिकल प्रोसेसिंग ऑर्डर
है , जो निर्धारित करता है कि एक चरण में परिभाषित वस्तुओं को बाद के चरणों में खंडों को उपलब्ध कराया जाता है:
- से
- चालू
- शामिल हों
- कहां
- ग्रुप बाय
- घन के साथ या रोलअप के साथ
- हो रहा है
- चुनें
- DISTINCT
- आदेश दें
- शीर्ष
इस प्रकार आपकी क्वेरी को आगे बढ़ाया जा रहा है और आपकी क्वेरी बिल्कुल ठीक दिखती है। लेकिन कभी-कभी, SQL Server आपकी क्वेरी को अनुकूलित करने के लिए इस आदेश का पालन नहीं करने का निर्णय लेता है।
आपके मामले में, SQL Server हो सकता है कि आपकी क्वेरी को किसी अन्य में सरलता से परिवर्तित/रूपांतरित कर रहा हो और convert कर रहा हो फ़ंक्शन, लागू करने से पहले where isnumeric छानना
यदि हमने आपकी क्वेरी को थोड़ा और जटिल बना दिया है (लेकिन फिर भी वही परिणाम दे रहे हैं), तो SQL Server इस बार कोड को सही तरीके से निष्पादित कर रहा है:
;with isnum AS (
SELECT result
FROM #temp
WHERE ISNUMERIC(result) = 1
GROUP BY result
HAVING MAX(result) = result
)
SELECT
result,
ISNUMERIC(result)
FROM isnum
WHERE CONVERT(INT,result) > 1;
आपके मामले में (और यह वही है जो मैं ऐसी स्थितियों में कर रहा हूं जब विभिन्न प्रकार एक कॉलम में संग्रहीत होते हैं), आप बस TRY_CONVERT समारोह:
;with isnum AS (
SELECT result
FROM #temp
WHERE ISNUMERIC(result) = 1)
SELECT
result,
ISNUMERIC(result)
FROM isnum
WHERE TRY_CONVERT(INT, result) > 1