Как обновить несколько записей в одном операторе, как это с SQL ?:обновления несколько записей в SQL
UPDATE records
SET name='abc' where id=3,
SET name='def' where id=1
Как обновить несколько записей в одном операторе, как это с SQL ?:обновления несколько записей в SQL
UPDATE records
SET name='abc' where id=3,
SET name='def' where id=1
Вы можете просто объединить обновления с сазом такого
UPDATE records
SET name =
CASE
WHEN id = 3 THEN 'abc'
WHEN id = 1 THEN 'def'
ELSE name
END
;WITH vals(id, name)
AS (SELECT 3,'abc'
UNION ALL
SELECT 1,'def')
UPDATE r
SET name = vals.name
FROM records r
JOIN vals
ON vals.id = r.id
Спасибо, выполнил мою работу из этого запроса. –
всего несколько записей, вы можете использовать:
update records
set name = case id
when 1 then 'def'
when 3 then 'abc'
end
where id in (1, 3)
немного более гибок, чтобы создать результат, который вы можете присоединиться в обновление:
update r
set name = x.name
from records r
inner join (
select id = 1, name = 'abc' union all
select 3, 'def' union all
select 4, 'qwe' union all
select 6, 'rty'
) x on x.id = r.id
Блестящий! Благодаря! –
Почему downvote? Если вы не объясните, что это такое, что вы считаете неправильным, оно не может улучшить ответ. – Guffa
Это должен быть принятый ответ. –
Стандарт SQL: 2003 синтаксис (работает на SQL Server 2008 и выше):
MERGE INTO records
USING (
VALUES (1, 'def'),
(3, 'abc')
) AS T (id, name)
ON records.id = T.id
WHEN MATCHED THEN
UPDATE
SET name = T.name;
Обратите внимание, что NAME
и RECORDS
- зарезервированные слова SQL.
Я думаю, что у вас должно быть 'where', но в противном случае оно будет делать обновление для всех записей в таблице. – Guffa
@Guffa У вас есть действительная точка, и я согласен с предложением 'where'. Недостатком этого является то, что мы должны убедиться, что условия в 'case' и' where' одинаковы. Конечно, мое решение обновляет все строки, но для строк, которые не подпадают под эти условия, они обновляются от 'name' до' name', что, очевидно, ничего не меняет –
В большинстве случаев это ничего не меняет, но представьте, что есть триггер обновления, который записывает все измененные строки в другую таблицу ... – Guffa