मैं घंटों के लिए नीचे दिए गए बयान डिबगिंग किया गया है:अजीब व्यवहार - यादृच्छिक चयन
SELECT
(
SELECT t1.anotherColumn
FROM table1 t1
WHERE t1.aColumn=(1+ABS(Checksum(NewId()))%54)
) res, *
FROM
(
SELECT TOP 200 * --PLEASE NOTICE HERE
FROM table2
)RESULT
और समस्या यह है कि हमेशा res
प्रत्येक पंक्ति के लिए एक ही मूल्य होता है। अब, अगर मैं 200
बदलता हूं जो 176
से नीचे किसी भी संख्या में क्वेरी कथन में हाइलाइट किया गया है तो यह table1
की यादृच्छिक पंक्तियां दिखाता है जो वांछित परिणाम है!
कृपया ध्यान दें कि 54
के परिणामों पर कोई प्रभाव नहीं पड़ता है और यह केवल इसलिए है क्योंकि मेरी तालिका में aColumn
के लिए 1 से 54 के 54 अलग-अलग मान हैं।
मैंने इस क्वेरी को विभिन्न तालिकाओं पर आजमाया है और यह अजीब व्यवहार दोहराया गया है!
ऐसा लगता है कि क्वेरी ऑप्टिमाइज़र यहां काम पर है। –
@TimBiegeleisen यह सीम करता है कि SQL सर्वर दृश्य के पीछे कुछ कर रहा है, और हो सकता है कि वह क्वेरी ऑप्टिमाइज़र है, मुझे यकीन नहीं है कि जब तक आप किसी भी तरह से नहीं जानते। बीटीडब्ल्यू, धन्यवाद देने का एक तरीका होना चाहिए कृपया मेरे लिए यह मत करो! – mok
आपको प्रत्येक परिणाम पंक्ति के लिए पहले सबक्वायरी निष्पादित करने के लिए इंजन को मजबूर करने की आवश्यकता हो सकती है। पहले सबक्वायरी में एक डमी स्थिति जोड़ने का प्रयास करें जो इसे एक सहसंबंध क्वेरी बनाता है, जैसे 'और result.id शून्य नहीं है – trincot