Bạn nên sử dụng CAST()
hoặc TRY_CAST()
thay vào đó:
declare @test nvarchar(8) = '12345678'
select cast(@test as bigint) -- errors on failure
select try_cast(@test as bigint) -- returns null on failure
Ngoài ra, điều quan trọng là chỉ ra ISNUMERIC()
không hoàn hảo. Từ tài liệu
:
ISNUMERIC trả về 1 cho một số ký tự không phải là số, chẳng hạn như dấu cộng (+), dấu trừ (-) và các ký hiệu tiền tệ hợp lệ như ký hiệu đô la ($). Để có danh sách đầy đủ các ký hiệu tiền tệ, hãy xem tiền và tiền nhỏ (Transact-SQL).
Vì lý do này, tôi không nghĩ rằng kiểm tra logic có giá trị ở đây. Tốt nhất nên sử dụng TRY_CAST()
trên tất cả các giá trị, bất kể sự hiện diện của các ký tự và xử lý phản hồi null theo cách có thể dự đoán được.