O problema OP tinha usando apenas
rand() é devido à sua avaliação uma vez por consulta . Da documentação :
A abordagem descrita abaixo remove a otimização e suprime esse comportamento, então
rand() é avaliado uma vez por linha :dateadd( second
, rand(cast(newid() as varbinary)) * 43200
, cast('08:00:00' as time) )
newid()gera valor exclusivo do tipouniqueidentifier;- o valor é convertido com
castpara ser usado como semente emrand([seed])função para gerar umfloatpseudo-aleatório valor de 0 a 1 , e como semente é sempre único o valor de retorno também é único .
SQLFiddle