Powinieneś użyć CAST()
lub TRY_CAST()
zamiast tego:
declare @test nvarchar(8) = '12345678'
select cast(@test as bigint) -- errors on failure
select try_cast(@test as bigint) -- returns null on failure
Należy również zwrócić uwagę na ISNUMERIC()
nie jest idealny. Z dokumentacji
:
ISNUMERIC zwraca 1 dla niektórych znaków, które nie są liczbami, takich jak plus (+), minus (-) i prawidłowych symboli walut, takich jak znak dolara ($). Aby uzyskać pełną listę symboli walut, zobacz money and smallmoney (Transact-SQL).
Z tego powodu nie sądzę, aby logiczny test miał tutaj wartość. Najlepiej używać TRY_CAST()
na wszystkich wartościach, niezależnie od obecności znaków i obsłuż odpowiedź pustą w przewidywalny sposób.