2011-03-17 3 views
2

J'ai une table avec 2 colonnes de données d'échantillon. Colonne1 est la clé primaire et est liée à plusieurs autres tables. La colonne 2 est un int qui va de 1 à 5. Je cherche un moyen de changer les données dans la colonne 2 de sorte que ça va de 1 à 8. Je ne suis pas un expert en SQL et je me demandais quel serait le moyen le plus facile de le faire. Il y a environ 3400 enregistrements donc je suppose que je pourrais entrer manuellement et taper des nombres au hasard mais je suis sûr qu'il y a une meilleure façon de le faire.serveur sql: mise à jour table aléatoire

Des suggestions?

Merci.

Répondre

5

Vous pouvez utiliser la fonction RAND(). Eh bien, vous pourriez l'utiliser si cela fonctionnait comme quelqu'un le supposerait.

Ce sera PAS travail sql-server:

UPDATE tableT 
    SET column2 = CAST(1 + (RAND() * 8) AS INT) 
; 

Mais cela ne:

UPDATE tableT 
    SET column2 = 1 + 8 * RAND(CHECKSUM(NEWID())) 
; 
+1

Cela conduira à 'column2' dans toutes les lignes 3400 ayant la même valeur dans SQL Server. –

+0

Oups, merci Martin. Tu as tout à fait raison. –

0

Je pense que votre réponse retournerait effectivement NINE, non?

Je vais essayer cette place

MISE À JOUR TABLETTE SET colonne2 = CAST (1 + (RAND() * 7) AS INT);

3

rand() est seulement évaluée une fois par requête. Donc, toutes vos valeurs column2 seront les mêmes.

Pour SQL Server 2008, vous pouvez utiliser

UPDATE tableT 
    SET column2 = 1+ (CRYPT_GEN_RANDOM(1) % 8) 

Pour les versions antérieures

UPDATE tableT 
    SET column2 = 1+ (abs(checksum(NewId())) % 8)