Problemet OP hade när du bara använde rand()
beror på dess utvärdering en gång per fråga .
Från dokumentationen :
Tillvägagångssätt som beskrivs nedan tar bort optimering och undertrycker detta beteende, så rand()
utvärderas en gång per rad :
dateadd( second
, rand(cast(newid() as varbinary)) * 43200
, cast('08:00:00' as time) )
newid()
genererar ett unikt värde av typenuniqueidentifier
;- värdet konverteras med
cast
att användas som frö irand([seed])
funktion för att generera en pseudoslumpmässigfloat
värde från 0 till 1 , och som frö är alltid unikt det returnerande värdet är också unikt .