Jika Anda menerima kesalahan Msg 8115, Level 16, kesalahan aritmatika overflow mengubah ekspresi menjadi tipe data int di SQL Server, bisa jadi Anda melakukan penghitungan yang menghasilkan nilai di luar rentang.
Ini bisa terjadi ketika Anda menggunakan fungsi seperti SUM()
pada kolom, dan penghitungan menghasilkan nilai yang berada di luar rentang jenis kolom.
Contoh Kesalahan
Berikut contoh kode yang menghasilkan kesalahan:
SELECT SUM(bank_balance)
FROM accounts;
Hasil:
Msg 8115, Level 16, State 2, Line 1 Arithmetic overflow error converting expression to data type int.
Dalam hal ini saya menggunakan SUM()
berfungsi untuk mendapatkan jumlah bank_balance
kolom, yang memiliki tipe data int
.
Error tersebut terjadi karena hasil perhitungan berada di luar range int
tipe data.
Ini semua data di tabel saya:
SELECT bank_balance
FROM accounts;
Hasil:
+----------------+ | bank_balance | |----------------| | 1300000000 | | 1200000000 | | 800500000 | +----------------+
Itu adalah beberapa saldo bank yang besar… dan menambahkan ketiganya menghasilkan jumlah yang lebih besar daripada int
dapat menangani (int
kisarannya adalah -2.147.483.648 hingga 2.147.483.647).
Solusinya
Kita dapat mengatasi kesalahan ini dengan mengonversi int
kolom ke bigint
saat kita menjalankan kueri:
SELECT SUM(CAST(bank_balance AS bigint))
FROM Accounts;
Hasil:
3300500000
Kali ini berhasil.
Anda juga dapat mengubah tipe data kolom yang sebenarnya untuk solusi yang lebih permanen.
Jika Anda bertanya-tanya, bigint
kisarannya adalah -9.223.372.036.854.775.808 hingga 9.223.372.036.854.775.807.
Kesalahan yang Sama dalam Skenario Berbeda
Galat yang sama (Msg 8115) juga dapat terjadi (dengan pesan galat yang sedikit berbeda) ketika Anda mencoba untuk secara eksplisit mengonversi antara tipe data dan nilai asli berada di luar kisaran tipe baru. Lihat Perbaiki “Arithmetic overflow error converting int to data type numeric” di SQL Server untuk memperbaikinya.
Kesalahan yang sama (Msg 8115) juga dapat terjadi (dengan pesan kesalahan yang sedikit berbeda) saat Anda mencoba memasukkan data ke dalam tabel saat IDENTITY
kolom telah mencapai batas tipe datanya. Lihat Perbaiki:“Kesalahan overflow aritmatika mengonversi IDENTITY
to data type…” di SQL Server untuk cara memperbaikinya.