2009-07-31 6 views
14

ich die folgen T-SQL eine Tabelle mit Testdaten zu aktualisieren:RAND nicht anders für jede Zeile in T-SQL UPDATE

UPDATE 
SomeTable 
SET 
    Created = GETDATE () - CAST (RAND () * 365 AS int) , 
    LastUpdated = GETDATE () - CAST (RAND () * 365 AS int) 

ich es zufällig DAE im vergangenen Jahr holen wollen, ist es leider verwendet für jede Zeile das gleiche Datum. Was ist der beste Weg, um jede Zeile, die es aktualisiert, zufällig zu machen?

Antwort

32

Verwenden RAND(CHECKSUM(NEWID()))

  • NEWID gibt eine GUID
  • CHECKSUM macht es int, zufällig
  • Die int Samen der RAND

In Ihrem Fall könnten Sie die checkum Modulo weil CHECKSUM (NEWID()) ist schon zufällig.

CHECKSUM(NEWID()) % 365 
+2

Great stuff. Ich frage mich, warum sie es nicht pro Zeile variieren, aber diese Frage ist für einen anderen Tag :) –

+2

Nebenbei hat Ihre Methode ein Problem: Es bringt negative Werte zurück. Einfache Lösung aber: ABS (CHECKSUM (NEWID())% 365) –

+0

doh! Vielen Dank. Das vergesse ich auch immer selbst ... – gbn

3

, wenn Sie nur wenige Tage aus dem vergangenen Jahr verwenden wollen, dass diese (bezogen auf die Antwort von @ gbn):

select GETDATE () - ABS(CHECKSUM(NEWID()) % 365) 
Verwandte Themen