Díky odkazům poskytnutým gbn věřím, že to odpovídá na mou otázku:
Stejně jako rand() je vyhodnocena jednou na sloupec, ale jednou vyhodnocená zůstává stejná pro všechny řádky....podívejte se na vlastnosti operátoru ComputeScalar ve skutečném plánu provádění, uvidíte, že GetDate() je vyhodnocena dvakrát.
Zkontroloval jsem to a zdá se, že se to stále děje stejným způsobem v SQL Server 2008:GetUtcDate()
se v prováděcím plánu vyhodnocuje dvakrát. Nebude produkovat různé výsledky na řádek, ale je možné, že by to mohlo přinést různé výsledky na sloupec, pokud by načasování skončilo tak akorát.
Upravit
Toto chování mohu skutečně dokázat! Zkuste toto:
select GETUTCDATE(), RAND(), RAND(), ...[~3000 RAND()s]..., RAND(), GETUTCDATE()
from [TableOfYourChoice]
V mém experimentu jsem skončil s 2011-05-17 20:47:34.247
v prvním sloupci a 2011-05-17 20:47:34.250
v posledním sloupci, který ukazuje rozdíl tří milisekund jako výsledek vyhodnocení všech RAND()
s mezi prvním a druhým voláním GETUTCDATE().