Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server:fasziniert von GETDATE()

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.