Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server:intrigado com GETDATE()


GetDate() nunca foi determinista. Determinístico significa que sempre retornará o mesmo resultado ao passar os mesmos parâmetros.

Em comum com rand() É avaliado uma vez por coluna mas uma vez avaliada permanece a mesma para todas as linhas.

É mais fácil ver esse comportamento com rand() do que getdate()
select top 4 rand(), rand()
from sys.objects

Retornou
---------------------- ----------------------
0.0566172633850772     0.431111195699363
0.0566172633850772     0.431111195699363
0.0566172633850772     0.431111195699363
0.0566172633850772     0.431111195699363

Se você tentar o seguinte
select top 10 getdate(), getdate()
from sys.objects

e observe as propriedades do operador ComputeScalar no plano de execução real, você verá que GetDate() é avaliado duas vezes.

NB:É possível que esse comportamento de avaliação por coluna e não por consulta tenha mudado após o SQL 2000 (não sei), mas não é isso que BOL define como o significado de determinístico.