Alex Kuznetsov memiliki bab hebat dalam bukunya Defensive Database Programming (Bab 8) yang mencakup T-SQL TRY ... CATCH, transaksi T-SQL & SET pengaturan XACT_ABORT, dan menggunakan penanganan kesalahan sisi klien. Ini akan banyak membantu Anda dalam memutuskan opsi mana yang paling masuk akal untuk apa yang perlu Anda capai.
Ini tersedia secara gratis di situs ini . Saya sama sekali tidak berafiliasi dengan perusahaan, tetapi saya memiliki versi cetak buku itu.
Ada banyak detail kecil tentang hal ini yang dijelaskan dengan sangat baik oleh Alex.
Per permintaan Nick ... (tetapi tidak semua ini ada di bab ini)
Dalam hal penskalaan, Anda harus jujur secara brutal tentang aktivitas apa yang perlu dalam kode db dan yang harus ada dalam aplikasi. Pernah perhatikan bagaimana kode yang mengeksekusi cepat cenderung kembali merancang untuk satu masalah per metode?
Cara termudah untuk berkomunikasi adalah kode kesalahan khusus (> 50.000). Ini juga cukup cepat. Itu berarti Anda harus tetap menyinkronkan kode db dan kode aplikasi. Dengan kode kesalahan khusus, Anda juga dapat mengembalikan informasi yang berguna dalam string pesan kesalahan. Karena Anda memiliki kode kesalahan khusus untuk situasi itu, Anda bisa menulis parser dalam kode aplikasi yang disesuaikan dengan format data kesalahan itu.
Juga, kondisi kesalahan apa yang perlu coba lagi logika dalam database? Jika Anda ingin mencoba lagi setelah X detik, lebih baik Anda menangani itu dalam kode aplikasi sehingga transaksi tidak terlalu banyak diblokir. Jika Anda hanya mengirim kembali operasi DML segera, mengulanginya di SP bisa lebih efisien. Perlu diingat, bahwa Anda mungkin harus menduplikasi kode atau menambahkan lapisan SPs untuk mencapai coba lagi.
Sungguh, itu saat ini rasa sakit terbesar dengan MENCOBA ... CATCH logika di SQL Server saat ini. Itu bisa dilakukan, tapi itu sedikit omong kosong. Cari beberapa peningkatan yang terjadi pada SQL Server 2012 ini, terutama melemparkan kembali pengecualian sistem (mempertahankan nomor kesalahan asli). Juga, ada FORMATMESSAGE , yang menambahkan beberapa fleksibilitas dalam membangun pesan kesalahan, terutama untuk tujuan pencatatan.