Saya membaca yang ERROR_STATE()
dapat membantu membedakan antara berbagai status / lokasi dalam kode sumber tempat jenis kesalahan yang sama dapat terjadi. Tetapi tidak terlalu jelas bagi saya bahwa itu bisa bermanfaat.
Status MSDN:
ERROR_STATE()
Mengembalikan jumlah kesalahan yang menyebabkan blok CATCH dari sebuah TRY… CATCH construct dijalankan.
Bagaimana itu bisa benar-benar digunakan? Bisakah seseorang memberi saya contoh, yang disediakan dalam artikel referensi ini tidak benar-benar membantu menjelaskan hal-hal baik untuk saya?
sql-server
sql-server-2008
error-handling
jaczjill
sumber
sumber
Error_State
danError_Number
kombinasi akan memberi Anda gambaran yang lebih jelas tentang kesalahan. Lihat fungsi penanganan kesalahan terkait lainnya di siniJawaban:
Tujuan status kesalahan SQL Server adalah agar tim pengembangan SQL Server dapat mengidentifikasi dalam kode tempat terjadinya kesalahan sistem, mengingat bahwa banyak kesalahan muncul di banyak tempat.
Anda sebagai pengguna akhir (mis. Pengembang aplikasi yang menggunakan SQL Server) juga dapat menggunakan status yang diteruskan ke
RAISERROR
sehingga dukungan produk Anda dapat mengidentifikasi tempat prosedur menimbulkan kesalahan, misalnya:Lihat bagaimana kedua negara memungkinkan Anda untuk membedakan nanti kasus kesalahan mana yang terkena. Sebelum Anda mengatakan 'tetapi saya dapat melihat pesan kesalahan' Saya memberi tahu Anda satu kata: internasionalisasi.
sumber
Tidak, itu tidak membantu Anda menemukan sesuatu tentang di mana kesalahan terjadi. Ini adalah contoh cepat. Jika Anda mencoba untuk membagi dengan 0, Anda mendapatkan pesan kesalahan dengan banyak detail:
Hasil:
Lihat yang dipanggil
State
, dengan nilai 1?ERROR_STATE()
mengembalikan nilai ini. Jadi, jika Anda menggunakanTRY/CATCH
:Hasil:
Itu saja. Tidak berguna di sebagian besar skenario. Saya sarankan lebih banyak membaca tentang penanganan kesalahan secara umum sebelum Anda menyelami terlalu dalam ke fungsi-fungsi spesifik yang terdengar bermanfaat.
http://msdn.microsoft.com/en-us/library/ms175976.aspx
http://www.sommarskog.se/error_handling_2005.html
sumber
Jawaban singkat - tidak bisa. ERROR_STATE pada dasarnya adalah sub-divisi dari ERROR_NUMBER. Itu tidak bisa memberi tahu Anda apa baris kode yang menyebabkan kesalahan (kecuali sejauh ERROR_NUMBER dan ERROR_STATE bersama-sama memberi tahu Anda penyebab kesalahan, dan kemudian menjadi jelas apa penyebabnya).
sumber