Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server RAISERROR-Anweisung mit einfachen Beispielen

Die SQL RAISERROR-Anweisung wird verwendet, um eine benutzerdefinierte Nachricht an die Clientanwendung zu senden. Es kann auch zum Debuggen der Anwendung verwendet werden und gilt für den Fehlerbehandlungsmechanismus.

Syntax und Parameter der SQL RAISERROR-Anweisung

Die Syntax der SQL-Anweisung RAISERROR lautet wie folgt:

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

Unten sehen Sie die Erläuterung der RAISERROR-Schlüsselwortparameter, die Sie angeben können:

Nachrichtentext – die Meldung, die Sie bei einem Fehler anzeigen möchten. Hinweis: Wir können benutzerdefinierte Nachrichten hinzufügen, um die Fehlerinformationen anzuzeigen. Siehe Erklärung im zweiten Abschnitt des Artikels.

message_id – die ID der Fehlermeldung. Wenn Sie die benutzerdefinierte Nachricht anzeigen möchten, müssen Sie sie definieren. Zeigen Sie die Liste der Nachrichten-IDs in der sys.messages DMV an .

Abfrage

select * from sys.messages

Die Ausgabe:

Schweregrad – die Schwere eines Fehlers. Der Datentyp des Schweregrads Variable ist smallint , und die Werte liegen zwischen 0 und 25. Die gültigen Werte für den Schweregrad des Fehlers lauten wie folgt:

  • 0-10 – Informationsmeldungen
  • 11-18 – Fehler
  • 19-25 – fatale Fehler

Hinweis : Wenn Sie eine benutzerdefinierte Nachricht erstellen, wird der in der benutzerdefinierten Nachricht angegebene Schweregrad durch den in der RAISERROR-Anweisung angegebenen Schweregrad außer Kraft gesetzt.

Zustand – die eindeutige Identifikationsnummer, mit der Sie den fehlerverursachenden Codeabschnitt identifizieren können. Der Datentyp des Zustandsparameters ist smallint , und die Werte liegen zwischen 0 und 255.

Kommen wir nun zu praktischen Beispielen.

Beispiel 1:Verwenden Sie die RAISERROR-Anweisung von SQL Server, um die Ausgabe zu drucken

In diesem Beispiel können Sie sehen, wie wir die Fehler- oder Informationsnachricht mit der RAISERROR-Anweisung anzeigen können.

Angenommen, Sie möchten die Nachricht nach dem Einfügen von Datensätzen in die Tabelle anzeigen. Wir können SQL PRINT- oder RAISERROR-Anweisungen verwenden. Es folgt der Code:

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) 

Die Ausgabe:

Wie Sie im obigen Bild sehen können, ist die Nachrichten-ID 50000, da es sich um eine benutzerdefinierte Nachricht handelt.

Beispiel 2:SQL-Anweisung RAISERROR mit dem dynamischen Nachrichtentext

Sehen Sie sich nun an, wie wir den dynamischen Nachrichtentext für die SQL-Anweisung RAISERROR erstellen können.

Angenommen, wir möchten die Patienten-ID in der Nachricht drucken. Ich habe die lokale Variable namens @PatientID definiert , die die patient_id enthält . Um den Wert von @patientID anzuzeigen Variable innerhalb des Nachrichtentextes können wir den folgenden Code verwenden:

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) 

Die Ausgabe:

Um den String in der RAISERROR-Anweisung anzuzeigen, müssen wir die Druckanweisungen im C-Stil verwenden.

Wie Sie im obigen Bild sehen können, an Um den Parameter im Nachrichtentext anzuzeigen, habe ich die Option %s verwendet das den String-Wert des Parameters anzeigt . Wenn Sie den ganzzahligen Parameter anzeigen möchten , können Sie die %d-Option verwenden .

Verwenden Sie SQL RAISERROR im TRY..CATCH-Block

In diesem Beispiel fügen wir SQL RAISERROR im TRY-Block hinzu. Wenn wir diesen Code ausführen, wird er im zugehörigen CATCH-Block ausgeführt. Im CATCH-Block zeigen wir die Details des aufgerufenen Fehlers an.

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;

Daher haben wir die RAISERROR-Anweisung mit der Schweregrad hinzugefügt zwischen 11-19. Es bewirkt die Ausführung des CATCH-Blocks.

Innerhalb des CATCH-Blocks zeigen wir die Informationen des ursprünglichen Fehlers mit der RAISERROR-Anweisung an.

Die Ausgabe:

Wie Sie sehen können, hat der Code die Informationen über den ursprünglichen Fehler zurückgegeben.

Lassen Sie uns nun verstehen, wie wir mit sp_addmessage eine benutzerdefinierte Nachricht hinzufügen können gespeicherte Prozedur.

sp_addmessage gespeicherte Prozedur

Wir können die benutzerdefinierte Nachricht hinzufügen, indem wir sp_addmessages ausführen gespeicherte Prozedur. Die Syntax lautet:

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

@msgnum: Geben Sie die Nachrichtennummer an. Der Datentyp des Parameters ist Integer. Es ist eine Nachrichten-ID für die benutzerdefinierte Nachricht.

@severity: Geben Sie den Schweregrad des Fehlers an. Die gültigen Werte liegen zwischen 1 und 25. Der Datentyp des Parameters ist smallint.

@messagetext: Geben Sie die Nachricht an, die Sie anzeigen möchten. Der Datentyp des Parameters ist nvarchar(255), und der Standardwert ist NULL.

@lang: Geben Sie die Sprache an, die Sie zum Anzeigen der Fehlermeldung verwenden möchten. Der Standardwert ist NULL.

@with_log: Dieser Parameter wird verwendet, um die Nachricht in die Ereignisanzeige zu schreiben. Die gültigen Werte sind TRUE und FALSE. Wenn Sie TRUE angeben, wird die Fehlermeldung in die Windows-Ereignisanzeige geschrieben. Wenn Sie FALSE wählen, wird der Fehler nicht in das Windows-Fehlerprotokoll geschrieben.

@replace: Wenn Sie die vorhandene Fehlermeldung durch eine benutzerdefinierte Nachricht und einen benutzerdefinierten Schweregrad ersetzen möchten, können Sie die Ersetzung in der gespeicherten Prozedur angeben.

Angenommen, Sie möchten eine Fehlermeldung erstellen, die eine ungültige Qualität zurückgibt Error. In der INSERT-Anweisung der Wert von product_quantity liegt zwischen 20 und 100. Die Nachricht sollte als Fehler behandelt werden, und der Schweregrad ist 16.

Führen Sie zum Erstellen der Nachricht die folgende Abfrage aus:

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

Sobald die Nachricht hinzugefügt wurde, führen Sie die folgende Abfrage aus, um sie anzuzeigen:

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

Die Ausgabe:

So verwenden Sie benutzerdefinierte Fehlermeldungen

Wie ich bereits erwähnt habe, müssen wir message_id verwenden in der RAISERROR-Anweisung für die benutzerdefinierten Nachrichten.

Wir haben eine Nachricht mit der ID 70001 erstellt. Die RAISERROR-Anweisung sollte wie folgt lauten:

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

Die Ausgabe:

Die RAISERROR-Anweisung hat die benutzerdefinierte Nachricht zurückgegeben.

sp_dropmessage gespeicherte Prozedur

Die sp_dropmessage gespeicherte Prozedur wird verwendet, um benutzerdefinierte Nachrichten zu löschen. Die Syntax lautet wie folgt:

EXEC Sp_dropmessage @msgnum

In der Syntax @msgnum gibt die ID der Nachricht an, die Sie löschen möchten.

Jetzt möchten wir die Nachricht mit der ID 70001 löschen . Die Abfrage lautet wie folgt:

EXEC Sp_dropmessage 70001 

Nachdem die Nachricht gelöscht wurde, führen Sie die folgende Abfrage aus, um sie anzuzeigen:

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

Die Ausgabe:

Wie Sie sehen können, wurde die Nachricht gelöscht.

Zusammenfassung

Daher haben wir die RAISERROR-Anweisung und ihre Parameter untersucht und ihre Verwendung in praktischen Beispielen demonstriert. Wir haben auch die Verwendung der sp_addmessage klargestellt und sp_dropmessage Gespeicherte Prozeduren. Ich hoffe, dass dieser Artikel Ihnen einige nützliche Erkenntnisse für Ihre Arbeitsziele gebracht hat.

Wir freuen uns immer über Ihre Kommentare und vielleicht zusätzliche praktische Tipps, wenn Sie sie teilen möchten.