Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Khắc phục “Lỗi tràn số học khi chuyển đổi biểu thức thành kiểu dữ liệu int” trong SQL Server

Nếu bạn đang gặp lỗi Msg 8115, Mức 16, lỗi tràn số học khi chuyển đổi biểu thức thành kiểu dữ liệu int trong SQL Server, có thể bạn đang thực hiện một phép tính dẫn đến giá trị nằm ngoài phạm vi.

Điều này có thể xảy ra khi bạn sử dụng một hàm như SUM() trên một cột và kết quả tính toán dẫn đến một giá trị nằm ngoài phạm vi của loại cột.

Ví dụ về lỗi

Dưới đây là một ví dụ về mã tạo ra lỗi:

SELECT SUM(bank_balance) 
FROM accounts;

Kết quả:

Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type int.

Trong trường hợp này, tôi đã sử dụng SUM() hàm lấy tổng của bank_balance cột có kiểu dữ liệu là int .

Lỗi xảy ra do kết quả của phép tính nằm ngoài phạm vi của int kiểu dữ liệu.

Đây là tất cả dữ liệu trong bảng của tôi:

SELECT bank_balance 
FROM accounts;

Kết quả:

+----------------+
| bank_balance   |
|----------------|
| 1300000000     |
| 1200000000     |
| 800500000      |
+----------------+

Đó là một số số dư ngân hàng lớn… và thêm ba số đó sẽ dẫn đến một số lớn hơn một số int có thể xử lý (int phạm vi là -2,147,483,648 đến 2,147,483,647).

Giải pháp

Chúng tôi có thể giải quyết lỗi này bằng cách chuyển đổi int thành một bigint khi chúng tôi chạy truy vấn:

SELECT SUM(CAST(bank_balance AS bigint)) 
FROM Accounts;

Kết quả:

3300500000

Lần này nó đã hoạt động.

Bạn cũng có thể thay đổi kiểu dữ liệu của cột thực tế để có giải pháp lâu dài hơn.

Trong trường hợp bạn đang thắc mắc, hãy bigint phạm vi là -9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807.

Cùng một lỗi trong các tình huống khác nhau

Lỗi tương tự (Msg 8115) cũng có thể xảy ra (với thông báo lỗi hơi khác) khi bạn cố gắng chuyển đổi rõ ràng giữa các kiểu dữ liệu và giá trị ban đầu nằm ngoài phạm vi của kiểu mới. Xem Khắc phục “Lỗi tràn số học khi chuyển đổi int thành kiểu dữ liệu số” trong SQL Server để khắc phục lỗi này.

Lỗi tương tự (Msg 8115) cũng có thể xảy ra (với thông báo lỗi hơi khác) khi bạn cố gắng chèn dữ liệu vào bảng khi IDENTITY của nó cột đã đạt đến giới hạn của loại dữ liệu. Xem Khắc phục:“Lỗi tràn số học khi chuyển đổi IDENTITY sang kiểu dữ liệu… ”trong SQL Server để biết cách khắc phục điều này.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo bảng với cột nhận dạng

  2. Làm cách nào để xóa nhật ký giao dịch SQL Server?

  3. Cơ sở dữ liệu hệ thống SQL Server - Khái niệm cơ bản

  4. Cách thay đổi đối chiếu của cơ sở dữ liệu SQL Server bằng T-SQL

  5. Chỉ mục dựa trên hàm trong SQL Server