sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server:fascinerad av GETDATE()

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.



  1. Autentisera PostgreSQL-användare och lösenord utan databas

  2. Skillnad mellan Oracle jdbc-drivrutinsklasser?

  3. Topp 7 jobb som kräver SQL

  4. Hur man får första posten ur varje grupp från resultatet hämtat med hjälp av grupp för kommando