Tack vare länkarna från gbn tror jag att detta svarar på min fråga:
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....titta på ComputeScalar-operatoregenskaperna i den faktiska exekveringsplanen kommer du att se att GetDate() utvärderas två gånger.
Jag kollade och det verkar som att detta fortfarande händer på samma sätt i SQL Server 2008:GetUtcDate()
utvärderas två gånger i genomförandeplanen. Det kommer inte att ge olika resultat per rad, men det är möjligt att det kan ge ett annat resultat per kolumn om tidpunkten hamnade precis rätt.
Redigera
Jag kan faktiskt bevisa detta beteende! Prova detta:
select GETUTCDATE(), RAND(), RAND(), ...[~3000 RAND()s]..., RAND(), GETUTCDATE()
from [TableOfYourChoice]
I mitt experiment slutade jag med 2011-05-17 20:47:34.247
i den första kolumnen och 2011-05-17 20:47:34.250
i den sista kolumnen, visar en skillnad på tre millisekunder som ett resultat av utvärderingen av alla RAND()
s mellan det första och andra anropet till GETUTCDATE().