web-dev-qa-db-ja.com

SQL Serverは、「式をデータ型intに変換する算術オーバーフローエラー」を返します。

このコマンドを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.

その原因は何ですか?

私は この答え の指示に従っています。

21
Evan Carroll

INT max(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;

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;
27
Erik Darling

この問題は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;

参照

11
m.geagea