pengembangan-web-mp.com

SQL Server mengembalikan "Kesalahan aritmatika overflow mengubah ekspresi ke int tipe data."

Ketika saya menjalankan perintah ini dengan SUM()

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

Saya mendapatkan,

Arithmetic overflow error converting expression to data type int.

Adakah yang tahu apa penyebabnya?

Saya hanya mengikuti petunjuk di jawaban ini .

21
Evan Carroll

Untuk nilai yang lebih besar dari INT maks (2.147.483.647), Anda ingin menggunakan 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;

Jika itu terjadi di SUM, Anda perlu mengonversi Amount menjadi 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;
27
Erik Darling

Masalah ini disebabkan oleh fungsi SUM()

anda harus CAST t.Amount sebagai 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;

Referensi

11
m.geagea