CAST()
を使用する必要があります またはTRY_CAST()
代わりに:
declare @test nvarchar(8) = '12345678'
select cast(@test as bigint) -- errors on failure
select try_cast(@test as bigint) -- returns null on failure
また、ISNUMERIC()
を指摘することも重要です 完璧ではありません。 docs
から :
ISNUMERICは、プラス(+)、マイナス(-)などの数値ではない一部の文字、およびドル記号($)などの有効な通貨記号に対して1を返します。通貨記号の完全なリストについては、money and smallmoney(Transact-SQL)を参照してください。
このため、ここでは論理チェックは価値がないと思います。 TRY_CAST()
を使用するのが最適です 文字の存在に関係なく、すべての値で、予測可能な方法でnull応答を処理します。