GetDate()
नियतात्मक कभी नहीं था। नियतात्मक का अर्थ है कि समान पैरामीटर पारित करने पर यह हमेशा वही परिणाम लौटाएगा।
rand()
. के समान इसका मूल्यांकन एक बार प्रति कॉलम . में किया जाता है लेकिन एक बार मूल्यांकन के बाद सभी पंक्तियों के लिए समान रहता है।
rand()
. के साथ इस व्यवहार को देखना आसान है getdate()
. की तुलना में
select top 4 rand(), rand()
from sys.objects
लौटा
---------------------- ----------------------
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
यदि आप निम्न प्रयास करें
select top 10 getdate(), getdate()
from sys.objects
और वास्तविक निष्पादन योजना में ComputeScalar ऑपरेटर गुणों को देखें, आप देखेंगे कि GetDate()
दो बार मूल्यांकन किया जाता है।
एनबी:यह संभव है कि एसक्यूएल 2000 (मुझे नहीं पता) के बाद प्रति क्वेरी के बजाय प्रति कॉलम मूल्यांकन का यह व्यवहार बदल गया है, लेकिन यह वह नहीं है जिसे बीओएल नियतात्मक के अर्थ के रूप में परिभाषित करता है।