Vous devez utiliser CAST() ou TRY_CAST() à la place :
declare @test nvarchar(8) = '12345678'
select cast(@test as bigint) -- errors on failure
select try_cast(@test as bigint) -- returns null on failure
Aussi, important de souligner le ISNUMERIC() n'est pas parfait. À partir de la documentation
:
ISNUMERIC renvoie 1 pour certains caractères qui ne sont pas des nombres, tels que plus (+), moins (-) et des symboles monétaires valides tels que le signe dollar ($). Pour une liste complète des symboles monétaires, consultez money et smallmoney (Transact-SQL).
Pour cette raison, je ne pense pas que la vérification logique soit utile ici. Le mieux est d'utiliser TRY_CAST() sur toutes les valeurs, indépendamment de la présence de caractères et gérer la réponse nulle de manière prévisible.