GetDate()
var aldrig deterministisk. Deterministisk betyder att det alltid kommer att returnera samma resultat när samma parametrar passeras.
Gemensamt med rand()
Den utvärderas en gång per kolumn men en gång utvärderad förblir den samma för alla rader.
Det är lättare att se detta beteende med rand()
än getdate()
select top 4 rand(), rand()
from sys.objects
Returnerade
---------------------- ----------------------
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
Om du provar följande
select top 10 getdate(), getdate()
from sys.objects
och titta på ComputeScalar-operatoregenskaperna i den faktiska exekveringsplanen så ser du att GetDate()
utvärderas två gånger.
OBS:Det är möjligt att detta beteende för utvärdering per kolumn snarare än per fråga ändrades efter SQL 2000 (jag vet inte) men det är inte vad BOL definierar som betydelsen av deterministisk.