SQL Server中如何通过SELECT批量更新Inventory表数据
批量更新库存表的SQL实现方案
针对你的需求,直接通过SQL批量更新就能替代应用层循环的低效操作,下面是两种可靠的实现方式:
方式一:先聚合明细数据(推荐)
如果InventoryTransferDetails中同一CTransferID+CBarcode可能存在多条记录,先聚合求和再更新,避免重复累加:
UPDATE i SET i.CQuantity = i.CQuantity + td.TotalQuantity FROM Inventory i JOIN ( SELECT CBarcode, SUM(CQuantity) AS TotalQuantity FROM InventoryTransferDetails WHERE CTransferID = 1009 AND CBarcode IN ('ORQ', 'MKX') GROUP BY CBarcode ) td ON i.CBarcode = td.CBarcode WHERE i.CSite = 'Store';
方式二:直接关联明细(适用于单条明细对应单条码)
如果确认InventoryTransferDetails中CTransferID=1009且条码为ORQ、MKX的记录各只有一条,也可以直接关联更新:
UPDATE i SET i.CQuantity += td.CQuantity FROM Inventory i JOIN InventoryTransferDetails td ON i.CBarcode = td.CBarcode WHERE td.CTransferID = 1009 AND td.CBarcode IN ('ORQ', 'MKX') AND i.CSite = 'Store';
关键说明:
- 替换了你示例中的GB前缀表名,和你给出的表名对应一致
- 通过
IN ('ORQ', 'MKX')精准过滤目标条码,避免更新其他无关数据 - 第一种方式通过
GROUP BY聚合同条码的总数量,确保即使明细有多条记录,也只会累加一次总数量,不会重复更新 - 使用
JOIN替代子查询关联,比你示例中的写法更高效清晰
内容的提问来源于stack exchange,提问作者chris_techno25
相关产品推荐
相关产品推荐

