Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Ще върне ли GETUTCDATE() една и съща стойност, ако се използва два пъти в едно и също изявление?

Благодарение на връзките, предоставени от gbn, вярвам, че това отговаря на въпроса ми:

Подобно на rand() Той се оценява веднъж на колона, но веднъж оценен остава същият за всички редове....погледнете свойствата на оператора ComputeScalar в действителния план за изпълнение, ще видите, че GetDate() се оценява два пъти.

Проверих и изглежда, че това все още се случва по същия начин в SQL Server 2008:GetUtcDate() се оценява два пъти в плана за изпълнение. Няма да доведе до различни резултати на ред, но е възможно да даде различен резултат на колона, ако времето свърши точно.

Редактиране

Всъщност мога да докажа това поведение! Опитайте това:

select GETUTCDATE(), RAND(), RAND(), ...[~3000 RAND()s]..., RAND(), GETUTCDATE()
from [TableOfYourChoice]

В моя експеримент завърших с 2011-05-17 20:47:34.247 в първата колона и 2011-05-17 20:47:34.250 в последната колона, показваща разлика от три милисекунди в резултат на оценката на всички RAND() s между първото и второто извикване на GETUTCDATE().



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Възстановяване на паралелно архивиране на SQL Server -1

  2. Проверете състоянието на пощенските опашки на базата данни в SQL Server (T-SQL)

  3. 5 предимства на проактивното наблюдение на ефективността на базата данни

  4. Редът на оператор SQL Select без клауза Order By

  5. MAX срещу Топ 1 - кое е по-добро?