sql >> Databáze >  >> RDS >> Sqlserver

SQL Server:zaujalo GETDATE()

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.



  1. Odstraňte z více tabulek pomocí pořadí podle a limitu

  2. Nastavit výchozí hodnotu celočíselného sloupce SQLite

  3. Časované události s php/MySQL

  4. Jak nastavit zdroj dat Spring/Heroku/postgres SSL