sql >> Base de Datos >  >> Database Tools >> SSMS

Aclaración ISNUMERIC() de SQL Server

Deberías usar CAST() o TRY_CAST() en cambio:

declare @test nvarchar(8) = '12345678'
select cast(@test as bigint) -- errors on failure
select try_cast(@test as bigint) -- returns null on failure

Además, es importante señalar el ISNUMERIC() no es perfecto De los docs :

ISNUMERIC devuelve 1 para algunos caracteres que no son números, como más (+), menos (-) y símbolos de moneda válidos como el signo de dólar ($). Para obtener una lista completa de los símbolos de moneda, consulte dinero y dinero pequeño (Transact-SQL).

Por esta razón, no creo que la comprobación lógica tenga valor aquí. Es mejor usar TRY_CAST() en todos los valores, independientemente de la presencia de caracteres y manejar la respuesta nula de manera predecible.