Jika Anda menerima kesalahan Msg 8115, Level 16, kesalahan aritmatika overflow mengkonversi int ke tipe data numerik di SQL Server, mungkin karena Anda melakukan operasi yang menghasilkan kesalahan konversi data karena nilai di luar rentang.
Ini akan sering terjadi saat Anda mencoba mengonversi angka ke tipe data yang berbeda, tetapi angka tersebut berada di luar rentang yang dapat diterima untuk tipe data baru.
Contoh Kesalahan
Berikut contoh kode yang menghasilkan kesalahan:
SELECT CAST(275 AS DECIMAL(3, 2));
Hasil:
Msg 8115, Level 16, State 8, Line 1 Arithmetic overflow error converting int to data type numeric.
Dalam hal ini saya mencoba mengubah bilangan bulat menjadi desimal.
Tetapi kesalahan saya adalah saya hanya mengizinkan presisi 3 untuk nilai desimal yang dihasilkan. Ketepatan ini tidak cukup untuk nilai yang akan dihasilkan oleh operasi ini (yaitu 275.00
).
Solusinya
Masalahnya mudah diperbaiki:
SELECT CAST(275 AS DECIMAL(5, 2));
Hasil:
275.00
Yang saya lakukan hanyalah meningkatkan argumen presisi ke nilai yang lebih memadai.
Secara khusus, saya meningkatkannya dari 3
ke 5
.
Jika saya mengharapkan bilangan bulat yang lebih besar muncul (misalnya, jika bilangan bulat berada di kolom database), maka saya perlu meningkatkan presisi sehingga dapat menangani nilai yang lebih besar.
Untuk memperjelas, presisi adalah jumlah total digit desimal maksimum yang akan disimpan. Angka ini mencakup sisi kiri dan kanan titik desimal. Presisi harus berupa nilai dari 1
melalui presisi maksimum 38
. Presisi default adalah 18
.
Kesalahan yang Sama dalam Skenario Berbeda
Kesalahan yang sama (Msg 8115) dapat terjadi (dengan pesan kesalahan yang sedikit berbeda) saat Anda menggunakan fungsi seperti SUM()
pada kolom, dan penghitungan menghasilkan nilai yang berada di luar rentang tipe kolom. Lihat Perbaiki “Aritmatika overflow error converting expression to data type int” di SQL Server untuk memperbaikinya.
Dan kesalahan yang sama (Msg 8115) juga dapat terjadi (dengan pesan kesalahan yang sedikit berbeda) ketika Anda mencoba memasukkan data ke dalam tabel ketika IDENTITY
kolom telah mencapai batas tipe datanya. Lihat Perbaiki:“Kesalahan overflow aritmatika mengonversi IDENTITY
to data type…” di SQL Server untuk cara memperbaikinya.