GetDate()
никога не е бил детерминистичен. Детерминиран означава, че винаги ще връща един и същ резултат, когато се предават същите параметри.
Общо с rand()
Оценява се веднъж на колона но веднъж оценен остава същият за всички редове.
По-лесно е да видите това поведение с rand()
отколкото getdate()
select top 4 rand(), rand()
from sys.objects
Върнато
---------------------- ----------------------
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
Ако опитате следното
select top 10 getdate(), getdate()
from sys.objects
и погледнете свойствата на оператора ComputeScalar в действителния план за изпълнение, ще видите, че GetDate()
се оценява два пъти.
NB:Възможно е това поведение на оценка по колона, а не по заявка, да се е променило след SQL 2000 (не знам), но това не е това, което BOL определя като значението на детерминистично.