sql >> Database teknologi >  >> RDS >> Sqlserver

Vil GETUTCDATE() returnere den samme værdi, hvis den bruges to gange i den samme sætning?

Takket være links fra gbn, tror jeg, at dette besvarer mit spørgsmål:

Fælles med rand() Den evalueres én gang pr. kolonne, men når den først er evalueret, forbliver den den samme for alle rækker....se på ComputeScalar-operatoregenskaberne i den faktiske udførelsesplan, vil du se, at GetDate() evalueres to gange.

Jeg tjekkede, og det ser ud til, at dette stadig sker på samme måde i SQL Server 2008:GetUtcDate() evalueres to gange i udførelsesplanen. Det kommer ikke til at give forskellige resultater pr. række, men det er muligt, at det kunne give et andet resultat pr. kolonne, hvis timingen endte helt rigtigt.

Rediger

Jeg kan faktisk bevise denne adfærd! Prøv dette:

select GETUTCDATE(), RAND(), RAND(), ...[~3000 RAND()s]..., RAND(), GETUTCDATE()
from [TableOfYourChoice]

I mit eksperiment endte jeg med 2011-05-17 20:47:34.247 i den første kolonne og 2011-05-17 20:47:34.250 i den sidste kolonne, der viser en forskel på tre millisekunder som et resultat af evalueringen af ​​alle RAND() s mellem det første og andet kald til GETUTCDATE().



  1. 2 måder at returnere rækker, der indeholder alfanumeriske tegn i MySQL

  2. Migrering af PostgreSQL til skyen - Sammenligning af løsninger fra Amazon, Google og Microsoft

  3. Hvordan kan jeg finde ikke-ASCII-tegn i MySQL?

  4. Sådan vælger du den første række i hver gruppe efter gruppe