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().