我们有一个在语句SUM
中的 Int 列上使用的存储过程。SELECT
在某些情况下,对于其中一个参数值,SUM(整数列)超出 Int 范围并因此抛出错误
将表达式转换为数据类型 int 时出现算术溢出错误
解决方案是在 sum 函数中将列转换为 bigint,即Sum(Convert(BigInt, column))
。但是,由于此时只有少数特定情况会发生这种情况,而不是所有情况,我担心我最终会惩罚不需要这种转换的其他情况。转换通常会产生多少性能差异?还有其他方法可以处理这个问题吗?谢谢!
在整个查询的上下文中,转换成本不太可能很大。最坏的情况是
SELECT SUM(CONVERT(bigint, integer_column)) FROM HugeTable;
,一旦您引入额外的连接和其他子句,转换成本很快就会变成整个资源成本的一个微不足道的百分比。可以通过将 int 列更改为 bigint 来避免显式转换。这有优点(避免所有查询的转换)和缺点(每行额外 4 个字节)。