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

Pernyataan SQL Server RAISERROR dengan Contoh Sederhana

Pernyataan SQL RAISERROR digunakan untuk mengirim pesan kustom ke aplikasi klien. Ini juga dapat digunakan untuk men-debug aplikasi dan berlaku untuk mekanisme penanganan kesalahan.

Sintaks dan Parameter Pernyataan SQL RAISERROR

Sintaks dari pernyataan SQL RAISERROR adalah sebagai berikut:

RAISERROR ( { message_text | message_id | @local_variable }  
    { ,severity ,state }  
    [ ,argument [ ,...n ] ]   
    [ WITH option [ ,...n ] ];

Di bawah ini Anda dapat melihat penjelasan parameter kata kunci RAISERROR yang dapat Anda tentukan:

teks_pesan – pesan yang ingin Anda tampilkan untuk kesalahan. Catatan: Kami dapat menambahkan pesan khusus untuk menampilkan informasi kesalahan. Lihat penjelasannya di bagian kedua artikel.

message_id – id dari pesan kesalahan. Jika Anda ingin menampilkan pesan yang ditentukan pengguna, Anda harus mendefinisikannya. Lihat daftar message_ids di sys.messages DMV .

Kueri

select * from sys.messages

Keluaran:

keparahan - tingkat keparahan kesalahan. Tipe data keparahan variabel adalah kecil , dan nilainya antara 0 dan 25. Nilai tingkat keparahan kesalahan yang valid adalah sebagai berikut:

  • 0-10 – pesan informasi
  • 11-18 – kesalahan
  • 19-25 – kesalahan fatal

Catatan : Jika Anda membuat pesan yang ditentukan pengguna, tingkat keparahan yang ditentukan dalam pesan yang ditentukan pengguna akan ditimpa oleh tingkat keparahan yang ditentukan dalam pernyataan RAISERROR.

negara bagian – nomor identifikasi unik yang dapat Anda gunakan untuk mengidentifikasi bagian kode yang menyebabkan kesalahan. Tipe data parameter status adalah kecil , dan nilainya antara 0 dan 255.

Sekarang, mari kita lanjutkan ke contoh praktis.

Contoh 1:Gunakan Pernyataan SQL Server RAISERROR untuk Mencetak Output

Dalam contoh ini, Anda dapat melihat bagaimana kami dapat menampilkan kesalahan atau pesan informasi menggunakan pernyataan RAISERROR.

Misalkan Anda ingin menampilkan pesan setelah memasukkan record ke dalam tabel. Kita dapat menggunakan pernyataan SQL PRINT atau RAISERROR. Berikut kodenya:

SET nocount ON 

INSERT INTO tblpatients 
            (patient_id, 
             patient_name, 
             address, 
             city) 
VALUES     ('OPD00006', 
            'Nimesh Upadhyay', 
            'AB-14, Ratnedeep Flats', 
            'Mehsana') 

RAISERROR ( 'Patient detail added successfully',1,1) 

Keluaran:

Seperti yang Anda lihat pada gambar di atas, ID pesannya adalah 50000 karena ini adalah pesan yang ditentukan pengguna.

Contoh 2:Pernyataan SQL RAISERROR dengan Teks Pesan Dinamis

Sekarang, lihat bagaimana kita dapat membuat teks pesan dinamis untuk pernyataan SQL RAISERROR.

Misalkan kita ingin mencetak ID pasien di pesan. Saya telah mendefinisikan variabel lokal bernama @PatientID , yang menyimpan patient_id . Untuk menampilkan nilai @patientID variabel dalam teks pesan, kita dapat menggunakan kode berikut:

DECLARE @PatientID VARCHAR(15) 
DECLARE @message NVARCHAR(max) 

SET @PatientID='OPD00007' 
SET @message ='Patient detail added successfully. The OPDID is %s' 

INSERT INTO tblpatients 
            (patient_id, 
             patient_name, 
             address, 
             city) 
VALUES     ('' + @PatientID + '', 
            'Nimesh Upadhyay', 
            'AB-14, Ratnedeep Flats', 
            'Mehsana') 

RAISERROR ( @message,1,1,@patientID) 

Keluaran:

Untuk menampilkan string dalam pernyataan RAISERROR, kita harus menggunakan pernyataan cetak gaya-C.

Seperti yang Anda lihat pada gambar di atas, ke menampilkan parameter dalam teks pesan, saya telah menggunakan opsi %s yang menampilkan nilai string parameter . Jika Anda ingin menampilkan parameter bilangan bulat , Anda dapat menggunakan %d opsi .

Gunakan SQL RAISERROR di TRY..CATCH Block

Dalam contoh ini, kami menambahkan SQL RAISERROR di blok TRY. Saat kami menjalankan kode ini, kode tersebut akan dieksekusi ke blok CATCH terkait. Di blok CATCH, kami akan menampilkan detail kesalahan yang dipanggil.

BEGIN try 
    RAISERROR ('Error invoked in the TRY code block.',16,1 ); 
END try 

BEGIN catch 
    DECLARE @ErrorMsg NVARCHAR(4000); 
    DECLARE @ErrSeverity INT; 
    DECLARE @ErrState INT; 

    SELECT @ErrorMsg = Error_message(), 
           @ErrSeverity = Error_severity(), 
           @ErrState = Error_state(); 

    RAISERROR (@ErrorMsg,
               @ErrSeverity,
               @ErrState 
    ); 
END catch;

Jadi, kami telah menambahkan pernyataan RAISERROR dengan keparahan antara 11 -19. Ini menyebabkan eksekusi blok CATCH.

Di dalam blok CATCH, kami menampilkan informasi kesalahan asli menggunakan pernyataan RAISERROR.

Keluaran:

Seperti yang Anda lihat, kode tersebut telah mengembalikan informasi tentang kesalahan asli.

Sekarang, mari kita pahami bagaimana kita dapat menambahkan pesan khusus menggunakan sp_addmessage prosedur tersimpan.

sp_addmessage Stored Procedure

Kami dapat menambahkan pesan khusus dengan menjalankan sp_addmessages prosedur tersimpan. Sintaksnya adalah:

EXEC Sp_addmessage 
  @msgnum= 70001, 
  @severity=16, 
  @msgtext='Please enter the numeric value', 
  @lang=NULL, 
  @with_log='TRUE', 
  @replace='Replace'; 

@msgnum: Tentukan nomor pesan. Tipe data parameter adalah integer. Ini adalah ID pesan untuk pesan yang ditentukan pengguna.

@keparahan: Tentukan tingkat keparahan kesalahan. Nilai yang valid adalah antara 1 dan 25. Tipe data parameternya adalah smallint.

@messagetext: Tentukan pesan yang ingin Anda tampilkan. Tipe data parameternya adalah nvarchar(255), dan nilai defaultnya adalah NULL.

@lang: Tentukan bahasa yang ingin Anda gunakan untuk menampilkan pesan kesalahan. Nilai defaultnya adalah NULL.

@with_log: Parameter ini digunakan untuk menulis pesan ke event viewer. Nilai yang valid adalah TRUE dan FALSE. Jika Anda menentukan TRUE, pesan kesalahan akan ditulis ke windows event viewer. Jika Anda memilih FALSE, kesalahan tidak akan ditulis ke log kesalahan windows.

@ganti: Jika Anda ingin mengganti pesan kesalahan yang ada dengan pesan yang ditentukan pengguna dan tingkat keparahan, Anda dapat menentukan penggantian dalam prosedur tersimpan.

Misalkan Anda ingin membuat pesan kesalahan yang mengembalikan kualitas tidak valid kesalahan. Dalam pernyataan INSERT, nilai produk_kuantitas antara 20 dan 100. Pesan harus diperlakukan sebagai kesalahan, dan tingkat keparahannya adalah 16.

Untuk membuat pesan, jalankan kueri berikut:

USE master;
go 
EXEC Sp_addmessage 
  70001, 
  16, 
  N'Product Quantity must be between 20 and 100.'; 
go

Setelah pesan ditambahkan, jalankan kueri di bawah ini untuk melihatnya:

USE master 
go 
SELECT * FROM   sys.messages WHERE  message_id = 70001 

Keluaran:

Cara Menggunakan Pesan Kesalahan Buatan Pengguna

Seperti yang saya sebutkan sebelumnya, kita harus menggunakan message_id dalam pernyataan RAISERROR untuk pesan yang ditentukan pengguna.

Kami telah membuat pesan dengan ID 70001. Pernyataan RAISERROR seharusnya sebagai berikut:

USE master 
go 
RAISERROR (70001,16,1 ); 
go 

Keluaran:

Pernyataan RAISERROR telah mengembalikan pesan yang ditentukan pengguna.

sp_dropmessage Stored Procedure

pesan sp_drop prosedur tersimpan digunakan untuk menghapus pesan yang ditentukan pengguna. Sintaksnya adalah sebagai berikut:

EXEC Sp_dropmessage @msgnum

Dalam sintaks, @msgnum menentukan ID pesan yang ingin Anda hapus.

Sekarang, kami ingin menghapus pesan yang ID-nya 70001 . Pertanyaannya adalah sebagai berikut:

EXEC Sp_dropmessage 70001 

Setelah pesan dihapus, jalankan kueri berikut untuk melihatnya:

USE master 
go 
SELECT * FROM   sys.messages WHERE  message_id = 70001 

Keluaran:

Seperti yang Anda lihat, pesan telah dihapus.

Ringkasan

Jadi, kami telah menjelajahi pernyataan RAISERROR, parameternya, dan mendemonstrasikan penggunaannya dalam contoh praktis. Kami juga telah mengklarifikasi penggunaan sp_addmessage dan sp_dropmessage prosedur tersimpan. Semoga artikel ini memberi Anda beberapa wawasan yang berguna untuk tujuan kerja Anda.

Kami selalu senang mendengar komentar Anda dan mungkin tips praktis tambahan jika Anda ingin membagikannya.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengembalian transaksi Entity Framework 6

  2. Apakah ada cara untuk mengakses nilai baris sebelumnya dalam pernyataan SELECT?

  3. Cara Membuat Tabel di SQL Server

  4. Mengapa IS NOT NULL mengembalikan nilai NULL untuk Varchar (maks) di SQL Server?

  5. Batas waktu koneksi untuk server SQL