我有一个数据库,Manifest
其中包含多个Inventory
项目。每个库存项目都有一个整数NetWeight
。
我有以下查询:
SELECT
ID,
(SELECT SUM(NetWeight) FROM Inventory WHERE Inventory.ManifestID = Manifest.ID)
FROM Manifest
这是抛出异常:Arithmetic overflow error converting expression to data type int.
我不明白为什么。
最近,如果没有过滤器,该Inventory
表已经超过了 int 的大小。
但是,我知道并已验证该子查询不存在值大于 100,000 的值。
如果我附加到查询末尾,它运行良好。所有ID都大于0,因此理论上这相当于根本没有过滤器。SUM(NetWeight)
Manifest
WHERE ID > 0
Manifest
我知道我可以将其转换为 abigint
并继续我的一天,但我想了解为什么 SQL 会溢出。
它是否出于某种原因在内部对整个库存表进行求和?
任何见解将不胜感激。
估计查询计划:https://www.brentozar.com/pastetheplan/?id =BJETnFUpa