GetDate()
war nie deterministisch. Deterministisch bedeutet, dass immer dasselbe Ergebnis zurückgegeben wird, wenn dieselben Parameter übergeben werden.
Gemeinsam mit rand()
Es wird einmal pro Spalte ausgewertet aber einmal ausgewertet bleibt für alle Zeilen gleich.
Es ist einfacher, dieses Verhalten mit rand()
zu sehen als getdate()
select top 4 rand(), rand()
from sys.objects
Zurückgegeben
---------------------- ----------------------
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
Wenn Sie Folgendes versuchen
select top 10 getdate(), getdate()
from sys.objects
und schauen Sie sich die Eigenschaften des ComputeScalar-Operators im tatsächlichen Ausführungsplan an, Sie werden sehen, dass GetDate()
wird doppelt ausgewertet.
NB:Es ist möglich, dass sich dieses Verhalten der Auswertung pro Spalte statt pro Abfrage nach SQL 2000 geändert hat (ich weiß es nicht), aber das ist nicht das, was BOL als die Bedeutung von deterministisch definiert.