Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Istruzione RAISERROR di SQL Server con esempi semplici

L'istruzione SQL RAISERROR viene utilizzata per inviare un messaggio personalizzato all'applicazione client. Può anche essere utilizzato per eseguire il debug dell'applicazione e si applica al meccanismo di gestione degli errori.

Sintassi e parametri dell'istruzione SQL RAISERROR

La sintassi dell'istruzione SQL RAISERROR è la seguente:

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

Di seguito puoi vedere la spiegazione dei parametri della parola chiave RAISERROR che puoi specificare:

testo_messaggio – il messaggio che si desidera visualizzare per un errore. Nota: Possiamo aggiungere messaggi personalizzati per mostrare le informazioni sull'errore. Guardalo spiegato nella seconda sezione dell'articolo.

ID_messaggio – l'ID del messaggio di errore. Se si desidera visualizzare il messaggio definito dall'utente, è necessario definirlo. Visualizza l'elenco di message_id nella DMV sys.messages .

Interroga

select * from sys.messages

Il risultato:

gravità – la gravità di un errore. Il tipo di dati della gravità variabile è smallint e i valori sono compresi tra 0 e 25. I valori validi di gravità dell'errore sono i seguenti:

  • 0-10 – messaggi informativi
  • 11-18 – errori
  • 19-25 – errori irreversibili

Nota : Se crei un messaggio definito dall'utente, la gravità specificata nel messaggio definito dall'utente verrà sovrascritta dalla gravità specificata nell'istruzione RAISERROR.

stato – il numero di identificazione univoco che è possibile utilizzare per identificare la sezione di codice che causa l'errore. Il tipo di dati del parametro di stato è smallint e i valori sono compresi tra 0 e 255.

Passiamo ora agli esempi pratici.

Esempio 1:utilizzare l'istruzione RAISERROR di SQL Server per stampare l'output

In questo esempio, puoi vedere come possiamo visualizzare l'errore o il messaggio informativo utilizzando l'istruzione RAISERROR.

Si supponga di voler visualizzare il messaggio dopo aver inserito i record nella tabella. Possiamo usare le istruzioni SQL PRINT o RAISERROR. Di seguito il codice:

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) 

Il risultato:

Come puoi vedere nell'immagine sopra, l'ID messaggio è 50000 perché è un messaggio definito dall'utente.

Esempio 2:istruzione SQL RAISERROR con il testo del messaggio dinamico

Ora, vediamo come possiamo creare il testo del messaggio dinamico per l'istruzione SQL RAISERROR.

Supponiamo di voler stampare l'ID del paziente nel messaggio. Ho definito la variabile locale denominata @PatientID , che contiene patient_id . Per visualizzare il valore di @patientID variabile all'interno del testo del messaggio, possiamo utilizzare il seguente codice:

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) 

Il risultato:

Per visualizzare la stringa nell'istruzione RAISERROR, dobbiamo utilizzare le istruzioni di stampa in stile C.

Come puoi vedere nell'immagine sopra, a visualizzare il parametro nel testo del messaggio, ho utilizzato l'opzione %s che visualizza il valore stringa del parametro . Se vuoi visualizzare il parametro intero , puoi utilizzare l'opzione %d .

Utilizza SQL RAISERROR nel blocco TRY..CATCH

In questo esempio, stiamo aggiungendo SQL RAISERROR nel blocco TRY. Quando eseguiamo questo codice, viene eseguito nel blocco CATCH associato. Nel blocco CATCH, visualizzeremo i dettagli dell'errore invocato.

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;

Pertanto, abbiamo aggiunto l'istruzione RAISERROR con la gravità tra 11 -19. Provoca l'esecuzione del blocco CATCH.

All'interno del blocco CATCH, stiamo mostrando le informazioni dell'errore originale utilizzando l'istruzione RAISERROR.

Il risultato:

Come puoi vedere, il codice ha restituito le informazioni sull'errore originale.

Ora cerchiamo di capire come possiamo aggiungere un messaggio personalizzato utilizzando sp_addmessage procedura memorizzata.

Procedura memorizzata sp_addmessage

Possiamo aggiungere il messaggio personalizzato eseguendo sp_addmessages procedura memorizzata. La sintassi è:

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

@msgnum: Specificare il numero del messaggio. Il tipo di dati del parametro è intero. È un ID messaggio per il messaggio definito dall'utente.

@gravità: Specificare il livello di gravità dell'errore. I valori validi sono compresi tra 1 e 25. Il tipo di dati del parametro è smallint.

@messagetext: Specificare il messaggio che si desidera visualizzare. Il tipo di dati del parametro è nvarchar(255), e il valore predefinito è NULL.

@lang: Specificare la lingua che si desidera utilizzare per visualizzare il messaggio di errore. Il valore predefinito è NULL.

@with_log: Questo parametro viene utilizzato per scrivere il messaggio nel visualizzatore di eventi. I valori validi sono TRUE e FALSE. Se si specifica TRUE, il messaggio di errore verrà scritto nel visualizzatore eventi di Windows. Se scegli FALSE, l'errore non verrà scritto nel registro degli errori di Windows.

@replace: Se desideri sostituire il messaggio di errore esistente con un messaggio e un livello di gravità definiti dall'utente, puoi specificare la sostituzione nella procedura memorizzata.

Si supponga di voler creare un messaggio di errore che restituisca una qualità non valida errore. Nell'istruzione INSERT, il valore della quantità_prodotto è compreso tra 20 e 100. Il messaggio deve essere considerato un errore e la gravità è 16.

Per creare il messaggio, esegui la seguente query:

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

Una volta che il messaggio è stato aggiunto, esegui la query seguente per visualizzarlo:

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

Il risultato:

Come utilizzare i messaggi di errore definiti dall'utente

Come accennato in precedenza, dobbiamo utilizzare message_id nell'istruzione RAISERROR per i messaggi definiti dall'utente.

Abbiamo creato un messaggio con l'ID 70001. L'istruzione RAISERROR dovrebbe essere la seguente:

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

Il risultato:

L'istruzione RAISERROR ha restituito il messaggio definito dall'utente.

Procedura memorizzata sp_dropmessage

Il sp_dropmessage la procedura memorizzata viene utilizzata per eliminare i messaggi definiti dall'utente. La sintassi è la seguente:

EXEC Sp_dropmessage @msgnum

Nella sintassi, @msgnum specifica l'ID del messaggio che desideri eliminare.

Ora vogliamo eliminare il messaggio il cui ID è 70001 . La query è la seguente:

EXEC Sp_dropmessage 70001 

Una volta che il messaggio è stato eliminato, esegui la seguente query per visualizzarlo:

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

Il risultato:

Come puoi vedere, il messaggio è stato cancellato.

Riepilogo

Pertanto, abbiamo esplorato l'istruzione RAISERROR, i suoi parametri e dimostrato il suo utilizzo in esempi pratici. Abbiamo anche chiarito l'utilizzo di sp_addmessage e sp_dropmessage procedura di archiviazione. Spero che questo articolo ti abbia fornito alcuni spunti utili per i tuoi obiettivi di lavoro.

Siamo sempre lieti di ascoltare i tuoi commenti e forse ulteriori suggerimenti pratici se desideri condividerli.