जीबीएन द्वारा प्रदान किए गए लिंक के लिए धन्यवाद, मुझे विश्वास है कि यह मेरे प्रश्न का उत्तर देता है:
<ब्लॉकक्वॉट>रैंड () के साथ आम तौर पर इसका मूल्यांकन प्रति कॉलम में एक बार किया जाता है लेकिन एक बार मूल्यांकन किए जाने पर सभी पंक्तियों के लिए समान रहता है .... वास्तविक निष्पादन योजना में ComputeScalar ऑपरेटर गुणों को देखें, आप देखेंगे कि GetDate() का मूल्यांकन दो बार किया जाता है।
मैंने जाँच की, और ऐसा प्रतीत होता है कि यह अभी भी SQL Server 2008 में उसी तरह होता है:GetUtcDate()
निष्पादन योजना में दो बार मूल्यांकन किया जाता है। यह प्रति पंक्ति अलग-अलग परिणाम नहीं देगा, लेकिन यह संभव है कि यदि समय सही हो तो यह प्रति कॉलम एक अलग परिणाम उत्पन्न कर सकता है।
संपादित करें
मैं वास्तव में इस व्यवहार को साबित कर सकता हूं! इसे आजमाएं:
select GETUTCDATE(), RAND(), RAND(), ...[~3000 RAND()s]..., RAND(), GETUTCDATE()
from [TableOfYourChoice]
अपने प्रयोग में, मैं 2011-05-17 20:47:34.247
. के साथ समाप्त हुआ पहले कॉलम में और 2011-05-17 20:47:34.250
अंतिम कॉलम में, सभी RAND()
के मूल्यांकन के परिणामस्वरूप तीन मिलीसेकंड का अंतर दिखा रहा है GETUTCDATE() को पहली और दूसरी कॉल के बीच।