Problém OP měl při použití pouze rand() je kvůli jeho vyhodnocení jednou na dotaz .
Z dokumentace :
Přístup, který je popsán níže, odstraňuje optimalizaci a potlačuje toto chování, takže rand() se vyhodnocuje jednou na řádek :
dateadd( second
, rand(cast(newid() as varbinary)) * 43200
, cast('08:00:00' as time) )
newid()generuje jedinečnou hodnotu typuuniqueidentifier;- hodnota se převede pomocí
castbýt použit jako semena vrand([seed])funkce pro generování pseudonáhodnéhofloathodnotu od 0 do 1 a jako zárodek je vždy jedinečné, návratová hodnota je také jedinečná.