2009-07-31 5 views
14

je le T-SQL suivi de mettre à jour une table avec des données de test:RAND pas différent pour chaque ligne UPDATE T-SQL

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

Je veux qu'il choisir Daes au hasard l'année dernière, malheureusement, il utilise la même date pour chaque ligne. Quel est le meilleur moyen de le rendre aléatoire chaque fois qu'il est mis à jour?

Répondre

32

Utilisez RAND(CHECKSUM(NEWID()))

  • NEWID retourne un GUID
  • CHECKSUM fait int, au hasard
  • Les graines int RAND

Dans votre cas, vous pouvez modulo le checkum parce CHECKSUM (NEWID()) est déjà aléatoire.

CHECKSUM(NEWID()) % 365 
+2

Great stuff. Je me demande pourquoi ils l'ont fait ne pas varier par rangée, mais cette question est pour un autre jour :) –

+2

En aparté, votre méthode a un problème: elle ramène des valeurs négatives. Correctif facile cependant: ABS (CHECKSUM (NEWID())% 365) –

+0

doh! Merci. J'oublie toujours moi aussi ... – gbn

3

si vous voulez seulement quelques jours de l'utilisation de la dernière année ce (en fonction de la réponse de @ GBN):

select GETDATE () - ABS(CHECKSUM(NEWID()) % 365) 
Questions connexes