Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Update с использованием IN  [new]
_Novichok
Member

Откуда:
Сообщений: 316
В таблице некоторые колонки по списку айди нужно проапдейтить.
есть варианты писать запрос в следующих видах:
-- 1)
UPDATE table SET Column1 = Column2 + Column3 WHERE ID = 1
UPDATE table SET Column1 = Column2 + Column3 WHERE ID = 7
...
UPDATE table SET Column1 = Column2 + Column3 WHERE ID = 254

ИЛИ
-- 2)
UPDATE table SET Column1 = Column2 + Column3 WHERE ID IN (1, 7,...254)

ИЛИ
-- 3)
UPDATE table SET Column1 = Column2 + Column3 
    WHERE ID = 1 OR ID=7, ..., OR ID=254


Какой вариант наиболее быстрый?
8 фев 16, 16:11    [18788490]     Ответить | Цитировать Сообщить модератору
 Re: Update с использованием IN  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
SQL Profiler религия использовать не позволяет ?
8 фев 16, 16:27    [18788652]     Ответить | Цитировать Сообщить модератору
 Re: Update с использованием IN  [new]
aleks2
Guest
Что-то навроде
declare @ids table (id int primary key);

insert @ids values (1), (7),...

UPDATE t SET Column1 = Column2 + Column3 
from table as t 
     inner join @ids as i on t.id = i.id;


следом идет 1).
8 фев 16, 16:41    [18788804]     Ответить | Цитировать Сообщить модератору
 Re: Update с использованием IN  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
_Novichok
Какой вариант наиболее быстрый?
Ответ не так очевиден, как может показаться.
2 и 3 дадут идентичный план выполнения. Будет ли он быстрее, чем 1 зависит от количества позиций в перечне id'ов, наличия ключа по id, наличия единой транзакции.

aleks2 дал универсальный вариант, если туда к update добавить option(recompile). Он, формально, может оказаться не самым быстрым, зато будет самым беспроблемным.
8 фев 16, 19:14    [18789666]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить