2009-07-31 13 views
14

ho il follow T-SQL per aggiornare una tabella con i dati di test:RAND non diverso per ogni riga in T-SQL UPDATE

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

voglio che raccogliere DAE casuali durante l'anno scorso, purtroppo, usa la stessa data per ogni riga. qual è il modo migliore per farlo diventare casuale ogni riga che aggiorna?

risposta

32

Usa RAND(CHECKSUM(NEWID()))

  • NEWID restituisce un GUID
  • CHECKSUM rende int, in modo casuale
  • I semi int RAND

Nel tuo caso, si potrebbe modulo il checkum perché CHECKSUM (NEWID()) è già casuale.

CHECKSUM(NEWID()) % 365 
+2

Grande roba. Mi chiedo perché l'hanno fatto non variano per riga, ma quella domanda è per un altro giorno :) –

+2

INOLTRE, il tuo metodo ha un problema: riporta valori negativi. Facile soluzione però: ABS (CHECKSUM (NEWID())% 365) –

+0

doh! Grazie. Lo dimentico sempre anch'io ... – gbn

3

se desideri solo giorni dalla uso nell'ultimo anno questo (in base alla risposta di @ gbn):

select GETDATE () - ABS(CHECKSUM(NEWID()) % 365) 
Problemi correlati