J'essaie d'insérer de manière aléatoire des valeurs d'une liste de valeurs prédéfinies dans une table pour les tester. J'ai essayé d'utiliser la solution trouvée sur cette question StackOverflow:Comment puis-je insérer des valeurs aléatoires dans une table SQL Server?
stackoverflow.com/.../update-sql-table-with-random-value-from-other-table
Quand je j'ai essayé cela, toutes mes valeurs « aléatoires » qui sont insérés sont exactement les mêmes pour tous les 3000 dossiers. Lorsque j'exécute la partie de la requête qui sélectionne réellement la ligne aléatoire, elle sélectionne un enregistrement aléatoire chaque fois que je l'exécute à la main, donc je sais que la requête fonctionne. Mes meilleures suppositions quant à ce qui se passe sont:
- SQL Server optimise la
SELECT
en quelque sorte, ne permettant pas la sous-requête à évaluer plus d'une fois - La graine de valeur aléatoire est la même sur tous les enregistrements des mises à jour de la requête
Je suis bloqué sur ce que mes options sont. Est-ce que je fais quelque chose de mal, ou y a-t-il une autre façon de le faire?
Ce code J'utilise:
DECLARE @randomStuff TABLE ([id] INT, [val] VARCHAR(100))
INSERT INTO @randomStuff ([id], [val])
VALUES (1, 'Test Value 1')
INSERT INTO @randomStuff ([id], [val])
VALUES (2, 'Test Value 2')
INSERT INTO @randomStuff ([id], [val])
VALUES (3, 'Test Value 3')
INSERT INTO @randomStuff ([id], [val])
VALUES (4, 'Test Value 4')
INSERT INTO @randomStuff ([id], [val])
VALUES (5, 'Test Value 5')
INSERT INTO @randomStuff ([id], [val])
VALUES (6, null)
INSERT INTO @randomStuff ([id], [val])
VALUES (7, null)
INSERT INTO @randomStuff ([id], [val])
VALUES (8, null)
INSERT INTO @randomStuff ([id], [val])
VALUES (9, null)
INSERT INTO @randomStuff ([id], [val])
VALUES (10, null)
UPDATE MyTable
SET MyColumn = (SELECT TOP 1 [val] FROM @randomStuff ORDER BY NEWID())
Cette question/réponse peut être utile: http://stackoverflow.com/a/9039661/47226 –