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
castatt användas som frö irand([seed])funktion för att generera en pseudoslumpmässigfloatvärde från 0 till 1 , och som frö är alltid unikt det returnerande värdet är också unikt .