SQL Server 返回“将表达式转换为 int 数据类型时出现算术溢出错误”。

Eva*_*oll 27 sql-server aggregate datatypes sql-server-2017

当我运行此命令时 SUM()

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

我越来越,

Arithmetic overflow error converting expression to data type int.
Run Code Online (Sandbox Code Playgroud)

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

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

Eri*_*ing 36

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

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

如果它发生在SUM,则需要转换AmountBIGINT.

SELECT COUNT(*) AS [Records], SUM(CONVERT(BIGINT, t.Amount)) AS [Total]
FROM   dbo.t1 AS t
WHERE  t.Id > 0
       AND t.Id < 101;
Run Code Online (Sandbox Code Playgroud)


小智 11

此问题是由SUM()功能引起的

你必须 CASTt.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;
Run Code Online (Sandbox Code Playgroud)

参考