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

SQL Server:заинтригуван от GETDATE()

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 определя като значението на детерминистично.



  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 сървър един ред множество колони в една колона

  2. Избягвайте дублирането в заявката INSERT INTO SELECT в SQL Server

  3. Lead() и LAG() функционалност в SQL Server 2008

  4. Проблем при свързване към sql сървър Неуспешно влизане. Входът е от ненадежден домейн и не може да се използва с Windows удостоверяване

  5. Sql LEFT OUTER JOIN с клауза WHERE