GetDate()
nikdy nebyl deterministický. Deterministický znamená, že při předání stejných parametrů vždy vrátí stejný výsledek.
Společné s rand()
Vyhodnocuje se jednou na sloupec ale jednou vyhodnocena zůstává stejná pro všechny řádky.
Toto chování je snazší vidět pomocí rand()
než getdate()
select top 4 rand(), rand()
from sys.objects
Vráceno
---------------------- ----------------------
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
Pokud zkusíte následující
select top 10 getdate(), getdate()
from sys.objects
a podívejte se na vlastnosti operátora ComputeScalar ve skutečném plánu provádění, uvidíte, že GetDate()
se hodnotí dvakrát.
Pozn.:Je možné, že se toto chování vyhodnocení podle sloupce než podle dotazu změnilo po SQL 2000 (nevím), ale to není to, co BOL definuje jako význam deterministického.