Gebruik CAST()
of TRY_CAST()
in plaats daarvan:
declare @test nvarchar(8) = '12345678'
select cast(@test as bigint) -- errors on failure
select try_cast(@test as bigint) -- returns null on failure
Het is ook belangrijk om te wijzen op de ISNUMERIC()
is niet perfect. Van de docs
:
ISNUMERIC retourneert 1 voor sommige tekens die geen cijfers zijn, zoals plus (+), min (-), en geldige valutasymbolen zoals het dollarteken ($). Voor een volledige lijst met valutasymbolen, zie geld en kleingeld (Transact-SQL).
Om deze reden denk ik dat de logische controle hier niet van waarde is. Gebruik het beste TRY_CAST()
op alle waarden, ongeacht de aanwezigheid van tekens en behandel de nulreactie op een voorspelbare manier.