将多行更新为一个查询

时间:2018-09-21 11:24:47

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

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

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时,不支持重复键更新...

1 个答案:

答案 0 :(得分:1)

对于简单的更新,您可以使用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...);

...

两者之间也可以组合。 祝你好运。