2009-07-31 13 views
14

tengo el seguimiento de T-SQL para actualizar una tabla con datos de prueba:RAND no diferente para cada fila de ACTUALIZACIÓN T-SQL

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

lo quiero para recoger Daes al azar en el último año, por desgracia, usa la misma fecha para cada fila. ¿Cuál es la mejor manera de hacer que sea aleatorio cada fila que actualiza?

Respuesta

32

Uso RAND(CHECKSUM(NEWID()))

  • NEWID devuelve un GUID
  • CHECKSUM hace que sea int, al azar
  • Las semillas int RAND

En su caso, se podría módulo el checkum porque CHECKSUM (NEWID()) ya es aleatorio.

CHECKSUM(NEWID()) % 365 
+2

Gran materia. Me pregunto por qué lo hicieron no varía por fila, pero esa pregunta es para otro día :) –

+2

Como un lado, su método tiene un problema: trae valores negativos. Sin embargo, una solución fácil: ABS (CHECKSUM (NEWID())% 365) –

+0

doh! Gracias. Siempre me olvido de esto yo también ... – gbn

3

si solo deseas día del pasado año este uso (basado en la respuesta de @ GBN):

select GETDATE () - ABS(CHECKSUM(NEWID()) % 365) 
Cuestiones relacionadas