2008-09-17 17 views
0

J'ai un nouveau champ varchar (10) dans une base de données avec plus de 1000 enregistrements. Je voudrais mettre à jour la table afin que je puisse avoir des données aléatoires sur le terrain. Je suis à la recherche d'une solution SQL.Comment mettre à jour un champ avec des données aléatoires?

Je sais que je peux utiliser un curseur, mais cela semble inélégant.

MS-SQL 2000, BTW

Répondre

5
update MyTable Set RandomFld = CONVERT(varchar(10), NEWID()) 
+0

Avec cet ajout MISE À JOUR \t champ table SET = convert (varchar (10), GAUCHE (NEWID(), 10)) –

+0

Désolé, n'ont pas SQLServer courir ici, donc je ne pouvais pas le tester. –

+0

Ceci affecte la même valeur de randomm à chaque entrée. http://stackoverflow.com/questions/94906/how-do-i-return-random-numbers-as-a-column-in-sql-server-2005#94951 va randomiser chaque ligne, et fonctionne dans SQL2000 – Adam

1

Vous pourriez être en mesure d'adapter quelque chose like this pour charger un jeu de données de test des valeurs, en fonction de ce que vous cherchez

0

Si cela est une chose une seule fois juste obtenir des données dans le système, je ne vois vraiment pas de problème avec l'utilisation d'un curseur autant que je déteste les curseurs, ils ont leur place.

1

En outre, si vous faites ceci juste pour des essais ou une utilisation de temps je dirais qu'une solution élégante n'est pas vraiment nécessaire.

0

Que diriez-vous ceci:

UPDATE TBL SET Field = LEFT(CONVERT(varchar(255), @myid),10) 
1

Pourquoi ne pas utiliser les 10 premiers caractères d'une somme de contrôle md5 de l'horodatage en cours et un nombre aléatoire?

0

si vous êtes dans SQL Server, vous pouvez utiliser

CAST(RAND() as varchar(10)) 

EDIT: Cela ne fonctionnera que dans une itération. Dans le cadre d'un insert à plusieurs lignes, il utilisera le même résultat RAND() pour chaque ligne.

1

Quelque chose comme (code non testé):

UPDATE yourtable 
SET yourfield= CHAR(32+ROUND(RAND()*95,0)); 

De toute évidence, concaténer caractères aléatoires si vous voulez jusqu'à dix caractères. Il est possible que l'optimiseur de requête définisse tous les champs sur la même valeur. dans ce cas, j'essaierais

SET yourfield=LEFT(yourfield,0)+CHAR… 

pour tromper l'optimiseur en recalculant chaque fois l'expression.

Questions connexes