Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Apa itu SQL Server RAISERROR?

Ketika ada yang tidak beres di T-SQL Anda, Anda ingin memperbaiki masalah dengan cepat dengan sedikit penggalian dan gangguan pada pengguna. Pesan kesalahan yang dihasilkan SQL Server sangat teknis dan sulit dipahami, yang dapat menyulitkan untuk mengisolasi masalah dan dapat memperlambat waktu penyelesaian. Untungnya, DBA dapat mengimplementasikan SQL Server RAISERROR sebagai alternatif dari pesan kesalahan SQL Server.

RAISERROR adalah pernyataan penanganan kesalahan SQL Server yang menghasilkan pesan kesalahan dan memulai pemrosesan kesalahan. RAISERROR dapat mereferensikan pesan yang ditentukan pengguna yang disimpan dalam tampilan katalog sys.messages atau dapat membuat pesan secara dinamis. Pesan dikembalikan sebagai pesan kesalahan server ke aplikasi pemanggil atau ke blok CATCH terkait dari konstruksi TRY...CATCH.

Ada beberapa skenario yang tepat untuk menggunakan pernyataan RAISERROR:

  • Pemecahan masalah kode Transact-SQL
  • Mengembalikan pesan yang berisi teks variabel
  • Memeriksa nilai data
  • Bila Anda memerlukan eksekusi untuk melompat dari blok TRY ke blok CATCH terkait atau mengembalikan informasi kesalahan dari blok CATCH ke pemanggil

Penting untuk dicatat bahwa ketika mengembangkan aplikasi baru, pernyataan THROW sekarang lebih disukai daripada RAISERROR untuk penanganan kesalahan. Tapi lebih lanjut tentang itu nanti.

Mengapa Menggunakan RAISERROR untuk Penanganan Kesalahan SQL Server?

Ada dua alasan utama untuk memilih RAISERROR daripada penanganan kesalahan yang dihasilkan SQL Server:

  1. Pesan RAISERROR dapat disesuaikan sesuai dengan tingkat keparahan dan status
  2. Dapat ditulis dalam bahasa alami yang mudah dipahami

RAISERROR mengembalikan pesan galat ke aplikasi dalam format yang sama yang dihasilkan oleh SQL Server Database Engine. Ini memungkinkan pengembang untuk menghasilkan pesan kesalahan mereka sendiri, sehingga siapa pun yang membaca pesan akan dapat memahami apa masalah sebenarnya daripada mencoba menguraikan pesan kesalahan teknis SQL Server. Pengembang juga dapat mengatur tingkat keparahan, ID pesan, dan status mereka sendiri untuk pesan kesalahan.

Menggunakan RAISERROR dengan TRY...CATCH Construct

TRY...CATCH adalah konstruksi penanganan kesalahan yang memungkinkan Anda mengeksekusi kode di bagian TRY dan menangani kesalahan di bagian CATCH. Secara umum, TRY...CATCH adalah cara yang efektif untuk mengidentifikasi banyak kesalahan T-SQL, tetapi ada beberapa pengecualian.

Tutorial ini memberikan panduan terperinci tentang cara menggunakan RAISERROR dalam hubungannya dengan TRY...CATCH. Penulis menggunakan contoh yang menunjukkan cara menggunakan RAISERROR di dalam blok TRY untuk menyebabkan eksekusi melompat ke blok CATCH terkait. Di dalam blok CATCH, penulis mendemonstrasikan cara menggunakan RAISERROR untuk mengembalikan informasi kesalahan yang memanggil blok CATCH. Outputnya menampilkan ID pesan, tingkat keparahan, dan status kesalahan.

RAISERROR vs. THROW Pernyataan Penanganan Kesalahan

RAISERROR diperkenalkan di SQL Server 7.0 dan telah menjadi cara yang efektif untuk menangani kesalahan T-SQL selama bertahun-tahun. Tetapi jika Anda mengembangkan aplikasi baru, Microsoft sekarang merekomendasikan untuk menggunakan pernyataan THROW daripada RAISERROR.

Saat organisasi memperbarui ke SQL Server 2012 dan di atasnya, RAISERROR sedang dihapus. Faktanya, RAISERROR tidak dapat digunakan dalam Prosedur Tersimpan SQL Server 2014 yang dikompilasi secara asli. THROW dianggap sebagai peningkatan dari RAISERROR karena lebih mudah digunakan.

Dokumentasi SQL Server Microsoft merinci perbedaan antara pernyataan penanganan kesalahan RAISERROR dan THROW sebagai berikut:

Pernyataan RAISERROR

  • Jika msg_id diteruskan ke RAISERROR, ID harus ditentukan di sys.messages.
  • Parameter msg_str dapat berisi gaya pemformatan printf.

Parameter keparahan menentukan tingkat keparahan pengecualian.

BUAT pernyataan

  • Parameter error_number tidak harus didefinisikan di sys.messages.
  • Parameter pesan tidak menerima pemformatan gaya printf.
  • Tidak ada parameter keparahan. Tingkat keparahan pengecualian selalu disetel ke 16.

Meskipun hari-hari RAISERROR dapat dihitung, itu tetap merupakan opsi penanganan kesalahan yang layak pada versi SQL Server yang lebih lama. Microsoft mendorong pengguna versi SQL Server yang lebih baru (SQL SERVER 2012 dan yang lebih baru) untuk menggunakan pernyataan THROW alih-alih RAISERROR untuk menerapkan penanganan kesalahan. Microsoft belum mengumumkan penghentian RAISERROR, tetapi tampaknya akan lebih cepat daripada nanti.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara terbaik untuk menggunakan Pernyataan SQL DELETE dalam tabel SQL

  2. Kesalahan Login SQL Server:Login gagal untuk pengguna 'NT AUTHORITY\SYSTEM'

  3. Apa itu Format String di SQL Server?

  4. Bagaimana cara mendapatkan id yang terakhir dimasukkan?

  5. Bagaimana cara menanyakan nilai dari node xml?