sql-server - 将多行更新为一个查询
问题描述
我需要以更快的方式更新多行和相同的列名。直到现在我正在使用这个;
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 不支持重复密钥更新时...
解决方案
对于简单的更新,您可以使用以下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...);
...
两者之间的组合也是可能的。祝你好运。
推荐阅读
- javascript - Flatlist项目重复问题
- java - 为什么顶部栏中的搜索在 android studio 中不起作用?
- java - Android 中未显示通知标题
- reactjs - UseState Hook 在 useEffect 中不起作用
- plot - 频率为 5 赫兹的正弦信号
- css - 如何根据子内容的高度为父 div 赋予高度
- java - 将鼠标悬停在图层 0 上方时,图层 1 中的组件会出现在图层 0 的上方
- python - 尝试将 AudioSegment 用于 .wav 文件时出错
- javascript - Response.redirect() 不是 vanilla JS 中的函数?
- python - 如何使用 Python 代码隐藏正在运行的控制台