sql >> Databasteknik >  >> RDS >> Sqlserver

Hur kan jag infoga slumpmässiga värden i en SQL Server-tabell?

När frågemotorn ser detta...

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

... allt är som, "ooooh, en cachbar skalär underfråga, jag ska cache den!"

Du måste lura frågemotorn att tro att den inte är cachbar. jfars svara var nära, men frågemotorn var smart nog att se tautalogin för MyTable.MyColumn = MyTable.MyColumn , men det är inte smart nog att se igenom det här.

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

Genom att ta in den yttre tabellen (MT) i underfrågan, antar frågemotorn att underfrågan måste omvärderas. Allt kommer verkligen att fungera, men jag använde den (förmodade) primärnyckeln för MyTable.Id eftersom den skulle indexeras och lägga till väldigt lite overhead.

En markör skulle förmodligen vara lika snabb, men är absolut inte lika rolig.



  1. Kan MySql återställa en sql-transaktion över flera tabeller?

  2. Lägger till främmande nyckel på flera kolumner

  3. Inre koppling mellan tre tabeller i mysql

  4. Django views.py Version av SQL Join with Multi Table Query