SSMS
 sql >> Base de Dados >  >> Database Tools >> SSMS

Esclarecimento do SQL Server ISNUMERIC()


Você deve usar CAST() ou TRY_CAST() em vez de:
declare @test nvarchar(8) = '12345678'
select cast(@test as bigint) -- errors on failure
select try_cast(@test as bigint) -- returns null on failure

Além disso, é importante destacar o ISNUMERIC() não é perfeito. Dos docs :

ISNUMERIC retorna 1 para alguns caracteres que não são números, como mais (+), menos (-) e símbolos de moeda válidos, como o cifrão ($). Para obter uma lista completa de símbolos de moeda, consulte money and smallmoney (Transact-SQL).

Por esta razão, não acho que a verificação lógica tenha valor aqui. Melhor usar TRY_CAST() em todos os valores, independentemente da presença de caracteres e manipular a resposta nula de maneira previsível.