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.