Dovresti usare CAST()
o TRY_CAST()
invece:
declare @test nvarchar(8) = '12345678'
select cast(@test as bigint) -- errors on failure
select try_cast(@test as bigint) -- returns null on failure
Inoltre, è importante sottolineare il ISNUMERIC()
non è perfetto. Dai documenti
:
ISNUMERIC restituisce 1 per alcuni caratteri che non sono numeri, come più (+), meno (-) e simboli di valuta validi come il simbolo del dollaro ($). Per un elenco completo dei simboli di valuta, vedere money e smallmoney (Transact-SQL).
Per questo motivo non credo che il controllo logico abbia valore qui. Meglio usare TRY_CAST()
su tutti i valori, indipendentemente dalla presenza di caratteri e gestire la risposta nulla in modo prevedibile.