SQLServerが“式をデータ型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. 

その原因について何か考えがありますか?

この回答

回答

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; 

SUMで発生している場合は、Amountを。

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

回答

この問題の原因はSUM()関数

t.Amountを<としてキャストする必要がありますdiv id = "51c49ef734">

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; 

リファレンス

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です