Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server :intrigué par GETDATE()

GetDate() n'a jamais été déterministe. Déterministe signifie qu'il renverra toujours le même résultat en passant les mêmes paramètres.

En commun avec rand() Il est évalué une fois par colonne mais une fois évalué reste le même pour toutes les lignes.

Il est plus facile de voir ce comportement avec rand() que getdate()

select top 4 rand(), rand()
from sys.objects

Renvoyé

---------------------- ----------------------
0.0566172633850772     0.431111195699363
0.0566172633850772     0.431111195699363
0.0566172633850772     0.431111195699363
0.0566172633850772     0.431111195699363

Si vous essayez ce qui suit

select top 10 getdate(), getdate()
from sys.objects

et regardez les propriétés de l'opérateur ComputeScalar dans le plan d'exécution réel, vous verrez que GetDate() est évalué deux fois.

NB :Il est possible que ce comportement d'évaluation par colonne plutôt que par requête ait changé après SQL 2000 (je ne sais pas) mais ce n'est pas ce que BOL définit comme le sens de déterministe.