Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Perbaiki "Kesalahan overflow aritmatika mengonversi ekspresi ke tipe data int" di SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menghapus Header Kolom saat Mengirim Hasil Kueri melalui Email di SQL Server (T-SQL)

  2. SQL Server Internal:Rencana Caching Pt. II – Menyusun Ulang Rencana

  3. Bagaimana cara meningkatkan kinerja untuk pemfilteran datetime di SQL Server?

  4. Pernyataan SQL GROUP BY CASE dengan fungsi agregat

  5. 9 Tugas Penting yang Menjadi Tanggung Jawab DBA