sql >> Databáze >  >> RDS >> Sqlserver

Jak mohu vložit náhodné hodnoty do tabulky serveru SQL?

Když dotazovací modul uvidí toto...

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

... je to všechno jako:"ooooh, skalární poddotaz, který lze uložit do mezipaměti, uložím to do mezipaměti!"

Musíte oklamat dotazovací stroj, aby si myslel, že je neuložitelný do mezipaměti. jfar's odpovědět byl blízko, ale dotazovací modul byl dostatečně chytrý, aby viděl tautalogii MyTable.MyColumn = MyTable.MyColumn , ale není to dost chytré, aby to vidělo.

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

Zavedením vnější tabulky (MT) do poddotazu dotazovací stroj předpokládá, že poddotaz bude muset být přehodnocen. Opravdu bude fungovat cokoli, ale použil jsem (předpokládaný) primární klíč MyTable.Id, protože by to bylo indexované a znamenalo by to velmi malé náklady.

Kurzor by byl pravděpodobně stejně rychlý, ale rozhodně není tak zábavný.



  1. Výběr souvislého bloku záznamů v mysql

  2. Více THEN na jeden příkaz CASE?

  3. Zpracování velké sady výsledků z mysql s omezenou pamětí

  4. Vestavěné testy PostgreSQL pro Java JUnit