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.