Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как мога да вмъкна произволни стойности в таблица на SQL Server?

Когато машината за заявки види това...

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

... всичко е като "оооо, кешираща скаларна подзаявка, ще я кеширам!"

Трябва да подмамите машината за заявки да мисли, че не може да се кешира. отговор беше близо, но машината за заявки беше достатъчно интелигентна, за да види тавтологията на MyTable.MyColumn = MyTable.MyColumn , но не е достатъчно умен, за да разбере това.

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

Чрез въвеждането на външната таблица (MT) в подзаявката, машината за заявки приема, че подзаявката ще трябва да бъде преоценена. Всичко ще работи наистина, но избрах (предполагаемия) първичен ключ на MyTable.Id, тъй като той ще бъде индексиран и ще добави много малко допълнителни разходи.

Курсорът вероятно би бил също толкова бърз, но със сигурност не е толкова забавен.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ADO.NET извикването на T-SQL Stored Procedure причинява SqlTimeoutException

  2. Създаване на динамична клауза where в съхранена процедура на SQL Server

  3. Актуализиране на нулева стойност на колона от ненулева стойност в предишния ред

  4. SQL Server не използва индекс, сравняващ datetime с not null

  5. Как да добавите време към DateTime в SQL