当我使用SUM()运行此命令时

SELECT COUNT(*) AS [Records], SUM(t.Amount) AS [Total]
FROM   dbo.t1 AS t
WHERE  t.Id > 0
       AND t.Id < 101;


我得到了,

Arithmetic overflow error converting expression to data type int.


关于什么的任何想法是什么原因?

我只是按照此答案中的说明进行操作。

#1 楼

对于大于INT最大值(2,147,483,647)的值,您将要使用COUNT_BIG(*)。 SUMAmount

SELECT COUNT_BIG(*) AS [Records], SUM(t.Amount) AS [Total]
FROM   dbo.t1 AS t
WHERE  t.Id > 0
       AND t.Id < 101;


#2 楼

此问题是由SUM()函数引起的

您必须将t.Amount转换为BIGINT

SELECT COUNT(*) AS [Records], SUM(CAST(t.Amount AS BIGINT)) AS [Total]
FROM   dbo.t1 AS t
WHERE  t.Id > 0
       AND t.Id < 101;


参考



https://stackoverflow.com/questions/8289310/how-to-prevent-arithmetic-overflow-error-when-using-sum-on-int-column