Du bör använda CAST()
eller TRY_CAST()
istället:
declare @test nvarchar(8) = '12345678'
select cast(@test as bigint) -- errors on failure
select try_cast(@test as bigint) -- returns null on failure
Det är också viktigt att påpeka ISNUMERIC()
är inte perfekt. Från dokumenten
:
ISNUMERIC returnerar 1 för vissa tecken som inte är siffror, som plus (+), minus (-) och giltiga valutasymboler som dollartecknet ($). För en komplett lista över valutasymboler, se pengar och småpengar (Transact-SQL).
Av denna anledning tror jag inte att den logiska kontrollen är av värde här. Bäst att använda TRY_CAST()
på alla värden, oavsett förekomsten av tecken och hantera nollsvaret på ett förutsägbart sätt.