SSMS
 sql >> Base de données >  >> Database Tools >> SSMS

Clarification de SQL Server ISNUMERIC()

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.