首页 > 解决方案 > 将多行更新为一个查询

问题描述

我需要以更快的方式更新多行和相同的列名。直到现在我正在使用这个;

Begin Transaction;
Update Inventory set Quantity-=1 where ID=1;
Update Inventory set Quantity-=4 where ID=2;
Update Inventory set Quantity-=1 where ID=1;
Update Inventory set Quantity-=5 where ID=4;
Commit;

这种方法效果很好,但我不会快速为同一个表中的每个值编写所有查询。有什么建议吗?当我阅读 sql server 不支持重复密钥更新时...

标签: sql-serversql-server-2008-r2

解决方案


对于简单的更新,您可以使用以下CASE语句:

UPDATE Inventory
SET Quantity += CASE ID
    WHEN 1 THEN -1
    WHEN 2 THEN -4
    WHEN 4 THEN -5
    ...
END
WHERE ID IN (1,2,4);

但是,这对于大量更新来说效率不高。在这些情况下,我更喜欢按具有相同更新UPDATE的值分组的“分块”:ID

UPDATE Inventory
SET Quantity += a
END
WHERE ID IN (X...);

UPDATE Inventory
SET Quantity += b
END
WHERE ID IN (Y...);

...

两者之间的组合也是可能的。祝你好运。


推荐阅读