or
sql-server sql-server-2017
evan carroll imported from SE
When I run this command with `SUM()`

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

I'm getting,

    Arithmetic overflow error converting expression to data type int.

Any idea on what is the cause of it?

I'm just following the instructions in [this answer](https://dba.stackexchange.com/a/174093/2639).
Top Answer
Erik Darling
For values larger than the `INT` max (2,147,483,647), you'll want to use [COUNT_BIG][1](*).

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

If it's happening in the `SUM`, you need to convert `Amount` to a `BIGINT`.

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


  [1]: https://docs.microsoft.com/en-us/sql/t-sql/functions/count-big-transact-sql
SQL Server returns “Arithmetic overflow error converting expression to data type int.”

This is a dedicated room for discussion about this question.

Once logged in you can direct comments to the question poster (or any answer poster) here.