GetDate()
was nooit deterministisch. Deterministisch betekent dat het altijd hetzelfde resultaat zal opleveren als dezelfde parameters worden doorgegeven.
Gemeenschappelijk met rand()
Het wordt eenmaal per kolom geëvalueerd maar eenmaal geëvalueerd blijft hetzelfde voor alle rijen.
Het is gemakkelijker om dit gedrag te zien met rand()
dan getdate()
select top 4 rand(), rand()
from sys.objects
Terug
---------------------- ----------------------
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
Als je het volgende probeert
select top 10 getdate(), getdate()
from sys.objects
en kijk naar de eigenschappen van de ComputeScalar-operator in het daadwerkelijke uitvoeringsplan, je zult zien dat GetDate()
wordt twee keer geëvalueerd.
NB:Het is mogelijk dat dit gedrag van evaluatie per kolom in plaats van per query is gewijzigd na SQL 2000 (ik weet het niet), maar dat is niet wat BOL definieert als deterministisch.