Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment puis-je insérer des valeurs aléatoires dans une table SQL Server ?

Lorsque le moteur de requête voit ceci...

(SELECT TOP 1 [val] FROM @randomStuff ORDER BY NEWID())

... c'est comme "ooooh, une sous-requête scalaire pouvant être mise en cache, je vais mettre ça en cache !"

Vous devez faire croire au moteur de requête qu'il ne peut pas être mis en cache. jfar répondre était proche, mais le moteur de requête était assez intelligent pour voir la tautalogie de MyTable.MyColumn = MyTable.MyColumn , mais ce n'est pas assez intelligent pour voir clair.

UPDATE MyTable
   SET MyColumn = (SELECT TOP 1 val
                     FROM @randomStuff r
                          INNER JOIN MyTable _MT
                                  ON M.Id = _MT.Id
                    ORDER BY NEWID())
 FROM MyTable M

En introduisant la table externe (MT) dans la sous-requête, le moteur de requête suppose que la sous-requête devra être réévaluée. Tout fonctionnera vraiment, mais j'ai opté pour la clé primaire (supposée) de MyTable.Id car elle serait indexée et ajouterait très peu de surcharge.

Un curseur serait probablement tout aussi rapide, mais ce n'est certainement pas aussi amusant.