Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Eindeutige zufällige Zeiterzeugung im festen Intervall

Das Problem OP hatte, während nur rand() verwendet wurde liegt an seiner Auswertung einmal pro Abfrage .

Aus der Dokumentation :

Der unten beschriebene Ansatz entfernt die Optimierung und unterdrückt dieses Verhalten, also rand() wird einmal pro Zeile ausgewertet :

dateadd( second
       , rand(cast(newid() as varbinary)) * 43200
       , cast('08:00:00' as time) )
  • newid() generiert einen eindeutigen Wert vom Typ uniqueidentifier ;
  • der Wert wird mit cast umgewandelt als Seed zu verwenden in rand([seed]) Funktion zum Generieren eines pseudozufälligen float Wert von 0 bis 1 , und als Seed ist immer eindeutig, der Rückgabewert ist auch eindeutig .

SQLFiddle