Проблемът OP имах, докато използвах само rand() се дължи на неговата оценка веднъж на заявка .
От документация :
Подходът, описан по-долу, премахва оптимизацията и потиска това поведение, така че rand() се оценява веднъж на ред :
dateadd( second
, rand(cast(newid() as varbinary)) * 43200
, cast('08:00:00' as time) )
newid()генерира уникална стойност от типuniqueidentifier;- стойността се преобразува с
castда се използва като семе вrand([seed])функция за генериране на псевдослучаенfloatстойност от 0 до 1 и като семе винаги е уникален, връщаната стойност също е уникална.