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

Khắc phục Msg 8114 “Lỗi chuyển đổi kiểu dữ liệu varchar thành số” trong SQL Server

Nếu bạn gặp lỗi SQL Server Msg 8114 có nội dung như Lỗi khi chuyển đổi kiểu dữ liệu varchar thành số , có thể là do bạn đang cố gắng thực hiện chuyển đổi loại dữ liệu nhưng không thành công do không thể chuyển đổi giá trị thành loại đích.

Đó không phải là vì bạn không thể chuyển đổi loại đó sang loại mới. Đó là vì giá trị của chính nó.

Ví dụ về Lỗi

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

SELECT CAST('Ten' AS DECIMAL(5,2));

Kết quả:

Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.

Lỗi này xảy ra do Máy chủ SQL không thể chuyển đổi giá trị chuỗi thành số thập phân.

Giải pháp 1

Để khắc phục điều này, bạn cần đảm bảo rằng bạn cung cấp một giá trị mà SQL Server có thể chuyển đổi.

Nếu bạn đang chuyển một cột, hãy kiểm tra xem bạn đã chọn đúng cột chưa. Tương tự nếu bạn đang chuyển một biến - hãy kiểm tra xem đó có phải là biến phù hợp hay không.

Hãy nhớ rằng điều này có thể không xảy ra trong mọi trường hợp cố gắng chuyển đổi một chuỗi thành số thập phân, vì một số giá trị chuỗi có thể được chuyển đổi.

Ví dụ:chuyển đổi sau thành công:

SELECT CAST('10' AS DECIMAL(5,2));

Kết quả:

10.00

Tại đây, SQL Server đã có thể tìm ra 10 là một số và do đó chuyển đổi đã thành công.

Giải pháp 2

Nếu bạn không phiền khi chuyển đổi không thành công, nhưng bạn không muốn nó trả về lỗi, hãy thử TRY_CAST() hoặc TRY_CONVERT() các chức năng.

Thay vì trả về lỗi, các hàm này trả về NULL khi không thể chuyển đổi giá trị.

Ví dụ:

SELECT TRY_CAST('Ten' AS DECIMAL(5,2));

Kết quả:

NULL

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm các thực thể tham chiếu trong SQL Server:sys.dm_sql_referencing_entities ()

  2. datetime so với smalldatetime trong SQL Server:Sự khác biệt là gì?

  3. Kết nối Genero với SQL Server

  4. Tôi có thể phân cách bằng dấu phẩy nhiều hàng thành một cột không?

  5. Cách bật / tắt quyền truy cập dữ liệu trong SQL Server (Ví dụ T-SQL)