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

GETUTCDATE() renverra-t-il la même valeur s'il est utilisé deux fois dans la même instruction ?

Grâce aux liens fournis par gbn, je pense que cela répond à ma question :

En commun avec rand(), il est évalué une fois par colonne mais une fois évalué reste le même pour toutes les lignes... 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.

J'ai vérifié, et il semble que cela se passe toujours de la même manière dans SQL Server 2008 :GetUtcDate() est évalué deux fois dans le plan d'exécution. Il ne produira pas de résultats différents par ligne, mais il est possible qu'il produise un résultat différent par colonne si le timing s'est bien déroulé.

Modifier

Je peux réellement prouver ce comportement ! Essayez ceci :

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

Dans mon expérience, je me suis retrouvé avec 2011-05-17 20:47:34.247 dans la première colonne et 2011-05-17 20:47:34.250 dans la dernière colonne, montrant une différence de trois millisecondes à la suite de l'évaluation de tous les RAND() s entre le premier et le second appel à GETUTCDATE().