Anda harus menggunakan CAST()
atau TRY_CAST()
sebagai gantinya:
declare @test nvarchar(8) = '12345678'
select cast(@test as bigint) -- errors on failure
select try_cast(@test as bigint) -- returns null on failure
Juga, penting untuk menunjukkan ISNUMERIC()
tidak sempurna. Dari dokumen
:
ISNUMERIC mengembalikan 1 untuk beberapa karakter yang bukan angka, seperti plus (+), minus (-), dan simbol mata uang yang valid seperti tanda dolar ($). Untuk daftar lengkap simbol mata uang, lihat uang dan uang kecil (Transact-SQL).
Untuk alasan ini saya tidak berpikir pemeriksaan logis adalah nilai di sini. Sebaiknya gunakan TRY_CAST()
pada semua nilai, terlepas dari keberadaan karakter dan menangani respons nol dengan cara yang dapat diprediksi.