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().