Du skal bruge CAST()
eller TRY_CAST()
i stedet:
declare @test nvarchar(8) = '12345678'
select cast(@test as bigint) -- errors on failure
select try_cast(@test as bigint) -- returns null on failure
Det er også vigtigt at påpege ISNUMERIC()
er ikke perfekt. Fra dokumenterne
:
ISNUMERIC returnerer 1 for nogle tegn, der ikke er tal, såsom plus (+), minus (-) og gyldige valutasymboler, såsom dollartegnet ($). For en komplet liste over valutasymboler, se penge og småpenge (Transact-SQL).
Af denne grund tror jeg ikke, at den logiske kontrol er af værdi her. Bedst at bruge TRY_CAST()
på alle værdier, uanset tilstedeværelsen af tegn og håndtere nul-svaret på en forudsigelig måde.