sql >> Database >  >> RDS >> Sqlserver

Hoe kan ik willekeurige waarden invoegen in een SQL Server-tabel?

Wanneer de query-engine dit ziet...

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

... het is allemaal zo van, "ooooh, een cachebare scalaire subquery, die ga ik cachen!"

U moet de query-engine voor de gek houden door te denken dat deze niet in cache kan worden opgeslagen. jfar's antwoord was dichtbij, maar de query-engine was slim genoeg om de tautalogie van MyTable.MyColumn = MyTable.MyColumn te zien , maar het is niet slim genoeg om hier doorheen te kijken.

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

Door de buitenste tabel (MT) in de subquery te plaatsen, gaat de query-engine ervan uit dat de subquery opnieuw moet worden geëvalueerd. Alles zal echt werken, maar ik koos voor de (veronderstelde) primaire sleutel van MyTable.Id omdat het zou worden geïndexeerd en heel weinig overhead zou toevoegen.

Een cursor zou waarschijnlijk net zo snel zijn, maar is zeker niet zo leuk.



  1. Ga naar sql - opgestelde instructiebereik

  2. psql:kan geen verbinding maken met de server:geen bestand of map (Mac OS X)

  3. Hoe rechtvaardigt_days() werkt in PostgreSQL

  4. Verschil tussen twee datums postgresql in Excel-indeling