查询列S的NULL值时触发算术溢出错误,求解决方案
解决查询NULL值时的算术溢出错误
错误原因
这个错误是因为表dbo.T的行数过多,导致SUM或COUNT(*)的返回值超出了SQL Server中int类型的最大值(2147483647),触发了类型转换溢出。SQL Server默认情况下,SUM()对整数的计算结果是int类型,COUNT(*)的返回值也是int类型,当结果超过int的上限时就会报错。
修正后的查询语句
方法1:修改SUM的返回类型为bigint
将CASE语句中的1转换为bigint,让SUM的结果自动变为bigint类型,避免溢出:
SELECT CAST(SUM(CASE WHEN S IS NULL THEN CAST(1 AS bigint) ELSE 0 END) AS nvarchar) AS NumberOfNullS FROM dbo.T; SELECT SUM(CASE WHEN S IS NULL THEN CAST(1 AS bigint) ELSE 0 END) AS [Number Of Null Values] FROM dbo.T;
方法2:使用COUNT_BIG替代COUNT(*)
COUNT_BIG(*)的返回类型是bigint,专门用于处理行数超过int上限的场景:
SELECT COUNT_BIG(*) FROM dbo.T WHERE S IS NULL;
额外说明
如果需要将最终结果转为字符串,直接对bigint类型的结果做CAST即可,不会再触发溢出问题。
内容的提问来源于stack exchange,提问作者Alp Aydemir
相关产品推荐
相关产品推荐

