Làm thế nào tôi có thể cập nhật nhiều bản ghi trong một tuyên bố đơn như thế này với SQL ?:Cập nhật nhiều bản ghi trong SQL
UPDATE records
SET name='abc' where id=3,
SET name='def' where id=1
Làm thế nào tôi có thể cập nhật nhiều bản ghi trong một tuyên bố đơn như thế này với SQL ?:Cập nhật nhiều bản ghi trong SQL
UPDATE records
SET name='abc' where id=3,
SET name='def' where id=1
Bạn chỉ có thể kết hợp một bản cập nhật với một tuyên bố trường hợp như vậy
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
Cảm ơn, đã hoàn thành công việc của tôi từ truy vấn này. –
Chỉ với một vài bản ghi, bạn có thể sử dụng:
update records
set name = case id
when 1 then 'def'
when 3 then 'abc'
end
where id in (1, 3)
Một chút linh hoạt hơn là tạo ra một kết quả mà bạn có thể tham gia vào các cập nhật:
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
Brilliant! Cảm ơn! –
Tại sao lại là downvote? Nếu bạn không giải thích những gì bạn nghĩ là sai, nó không thể cải thiện câu trả lời. – Guffa
Đây phải là câu trả lời được chấp nhận. –
Chuẩn SQL: 2003 cú pháp (hoạt động trên SQL Server 2008 trở đi):
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;
Lưu ý rằng NAME
và RECORDS
là các từ dành riêng cho SQL.
Tôi nghĩ rằng bạn nên có một 'where' trên đó, nếu không nó sẽ làm một bản cập nhật trên tất cả các bản ghi trong bảng. – Guffa
@Guffa Bạn có một điểm hợp lệ và tôi đồng ý với điều khoản 'where'. Nhược điểm của điều này là chúng ta cần đảm bảo các điều kiện trong 'case' và' where' là giống nhau. Chắc chắn, giải pháp của tôi cập nhật tất cả các hàng, nhưng đối với các hàng không nằm trong các điều kiện này, chúng được cập nhật từ 'name' thành' name', điều này rõ ràng không thay đổi bất cứ điều gì –
Trong hầu hết các trường hợp, nó không thay đổi bất cứ điều gì, nhưng hãy tưởng tượng rằng có một kích hoạt trên bản cập nhật ghi nhật ký tất cả các hàng đã thay đổi sang một bảng khác ... – Guffa