Mengenai setelah pemikiran Anda.
SQL Server 2012 memperkenalkan TRY_CONVERT
untuk kebutuhan ini. Jadi kueri berikut akan mengembalikan NULL
daripada sebuah kesalahan.
SELECT TRY_CONVERT ( FLOAT, 'Fish')
Tidak ada jaminan bahkan dengan paket serial bahwa WHERE
klausa akan terjadi sebelum SELECT
dievaluasi. Seperti yang dijelaskan dalam entri blog ini
dari SQL Server 2005 dan seterusnya ini lebih mungkin terjadi daripada di versi sebelumnya. Perubahan Perilaku pada Fitur Database Engine di SQL Server 2005
secara khusus menyebutnya sebagai berikut.
Diskusi lebih lanjut tentang perilaku ini ada di posting blog bagus lainnya oleh Craig Freedman Kesalahan Konversi dan Aritmatika .
Pada versi sebelum 2012 dan TRY_CONVERT
anda perlu membungkus CAST AS FLOAT
dalam CASE
penyataan. misalnya
SELECT CASE WHEN ISNUMERIC(Col)=1 THEN CAST(Col AS FLOAT) END AS Col
FROM Table
WHERE ISNUMERIC(Col)=1
Ini masih belum sepenuhnya dijamin untuk mencegah Anda mendapatkan kesalahan sebagai ISNUMERIC
sendiri hanya memeriksa bahwa nilainya akan dilemparkan ke salah satu tipe data numerik daripada secara khusus ke float Contoh input yang akan gagal adalah '.'
CASE
didokumentasikan untuk sebagian besar korsleting dalam buku online (beberapa pengecualian dibahas di sini
)
Anda juga dapat menemukan diskusi/keluhan tambahan tentang hal ini di item koneksi SQL Server tidak boleh memunculkan kesalahan tidak logis dan penjelasan yang bagus tentang masalah serupa oleh SQLKiwi