sql >> Database >  >> RDS >> Sqlserver

SQL Server:geïntrigeerd door GETDATE()

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.



  1. SQL - Hoe vind je het hoogste getal in een kolom?

  2. Hoe importeer ik een SQL Server .bak-bestand in MySQL?

  3. Het transactielogboekvet bijsnijden

  4. Mysql join vanuit meerdere tabellen