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
cast
para ser usado como semente emrand([seed])
função para gerar umfloat
pseudo-aleatório valor de 0 a 1 , e como semente é sempre único o valor de retorno também é único .
SQLFiddle