Měli byste použít CAST()
nebo TRY_CAST()
místo toho:
declare @test nvarchar(8) = '12345678'
select cast(@test as bigint) -- errors on failure
select try_cast(@test as bigint) -- returns null on failure
Také je důležité zdůraznit ISNUMERIC()
není dokonalý. Z dokumenty
:
ISNUMERIC vrátí 1 pro některé znaky, které nejsou čísly, jako je plus (+), mínus (-) a platné symboly měny, jako je znak dolaru ($). Úplný seznam symbolů měn naleznete v části money and smallmoney (Transact-SQL).
Z tohoto důvodu si myslím, že logická kontrola zde nemá cenu. Nejlepší je použít TRY_CAST()
na všech hodnotách bez ohledu na přítomnost znaků a zpracovat nulovou odpověď předvídatelným způsobem.