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

Vrátí GETUTCDATE() stejnou hodnotu, pokud se použije dvakrát ve stejném příkazu?

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().



  1. Tipy pro správu schémat pro MySQL a MariaDB

  2. Jak zkrátit text pomocí elipsy v MariaDB

  3. Jak zobrazím aktivní připojení k serveru SQL?

  4. Oznámení obecné dostupnosti SQL Safe Backup 8.7.2