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

Khắc phục “Lỗi tràn số học chuyển đổi int thành kiểu dữ liệu số” 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 int thành kiểu dữ liệu là số trong SQL Server, có thể là do bạn đang thực hiện một thao tác dẫn đến lỗi chuyển đổi dữ liệu do giá trị nằm ngoài phạm vi.

Điều này thường xảy ra khi bạn cố gắng chuyển đổi một số sang một kiểu dữ liệu khác, nhưng nó nằm ngoài phạm vi được chấp nhận cho kiểu dữ liệu mới.

Ví dụ về lỗi

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

SELECT CAST(275 AS DECIMAL(3, 2));

Kết quả:

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

Trong trường hợp này, tôi đang cố gắng chuyển đổi một số nguyên thành một số thập phân.

Nhưng sai lầm của tôi là tôi chỉ cho phép độ chính xác là 3 cho giá trị thập phân kết quả. Độ chính xác này không đủ cho giá trị sẽ được tạo ra bởi hoạt động này (sẽ là 275.00 ).

Giải pháp

Sự cố được khắc phục dễ dàng:

SELECT CAST(275 AS DECIMAL(5, 2));

Kết quả:

275.00

Tất cả những gì tôi làm là tăng đối số chính xác lên một giá trị đủ hơn.

Cụ thể, tôi đã tăng nó từ 3 thành 5 .

Nếu tôi mong đợi các số nguyên lớn hơn đi qua (ví dụ:nếu số nguyên nằm trong cột cơ sở dữ liệu), thì tôi cần tăng độ chính xác để nó có thể xử lý các giá trị lớn hơn.

Nói rõ hơn, độ chính xác là tổng số chữ số thập phân tối đa được lưu trữ. Số này bao gồm cả bên trái và bên phải của dấu thập phân. Độ chính xác phải là giá trị từ 1 thông qua độ chính xác tối đa là 38 . Độ chính xác mặc định là 18 .

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

Lỗi tương tự (Msg 8115) có thể xảy ra (với một thông báo lỗi hơi khác) 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. Xem 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 để khắc phục sự cố này.

Và 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. Chuỗi kết nối sql mà tôi cần sử dụng để truy cập localhost \ SQLEXPRESS với Xác thực Windows hoặc Xác thực SQL là gì?

  2. 3 cách để trích xuất tháng từ một ngày trong SQL Server (T-SQL)

  3. Có cách nào để chèn hoặc cập nhật SQLBulkCopy nếu tồn tại không?

  4. Cách tìm vị trí của tệp dữ liệu và tệp nhật ký trong SQL Server

  5. Tìm một chuỗi bằng cách tìm kiếm tất cả các bảng trong SQL Server