Le problème OP eu en utilisant juste rand() est dû à son évaluation une fois par requête .
De la documentation :
L'approche décrite ci-dessous supprime l'optimisation et supprime ce comportement, donc rand() est évalué une fois par ligne :
dateadd( second
, rand(cast(newid() as varbinary)) * 43200
, cast('08:00:00' as time) )
newid()génère une valeur unique de typeuniqueidentifier;- la valeur est convertie avec
castà utiliser comme graine dansrand([seed])fonction pour générer unfloatpseudo-aléatoire valeur de 0 à 1 , et comme graine est toujours unique, la valeur renvoyée est également unique .