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