Để tránh lỗi như vậy, bạn có thể sử dụng CASE
+ ISNUMERIC
để xử lý các tình huống khi bạn không thể chuyển đổi thành int.
Thay đổi
CONVERT(INT, CONVERT(VARCHAR(12), a.value))
Tới
CONVERT(INT,
CASE
WHEN IsNumeric(CONVERT(VARCHAR(12), a.value)) = 1 THEN CONVERT(VARCHAR(12),a.value)
ELSE 0 END)
Về cơ bản, điều này đang nói nếu bạn không thể chuyển đổi tôi thành giá trị int gán là 0 (trong ví dụ của tôi)
Ngoài ra, bạn có thể xem bài viết này về cách tạo một hàm tùy chỉnh sẽ kiểm tra xem a.value
là số:http://www.tek-tips.com/faqs.cfm?fid=6423