sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan kan jeg indsætte tilfældige værdier i en SQL Server-tabel?

Når forespørgselsmotoren ser dette...

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

... det hele er ligesom, "åååh, en skalær underforespørgsel, der kan cachelagres, den skal jeg cache!"

Du skal narre forespørgselsmotoren til at tro, at den ikke er cachbar. jfars svar var tæt på, men forespørgselsmotoren var smart nok til at se tautalogien af ​​MyTable.MyColumn = MyTable.MyColumn , men det er ikke smart nok at gennemskue dette.

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

Ved at bringe den ydre tabel (MT) ind i underforespørgslen, antager forespørgselsmotoren, at underforespørgsel skal revurderes. Alt vil virkelig fungere, men jeg brugte den (antagede) primære nøgle til MyTable.Id, da den ville blive indekseret og ville tilføje meget lidt overhead.

En markør ville nok være lige så hurtig, men er bestemt ikke så sjov.



  1. Sådan automatiseres processen med SQL Server Database Schema Synchronization

  2. Sådan ændres MySQL-serverens tidszone

  3. Opbygning af mysql-forespørgsel til at tælle specifikke data under samme tabel/række

  4. Planlagt vedligeholdelse af 24/7 IS-databasen i MS SQL Server