Zusammenfassung: In diesem Tutorial erfahren Sie, wie Sie die SQL Server RAISERROR
-Anweisung verwenden, um benutzerdefinierte Fehlermeldungen zu generieren.
Wenn Sie eine neue Anwendung entwickeln, sollten Sie stattdessen die THROW
Anweisung verwenden.,
Übersicht der SQL Server RAISEERROR-Anweisung
Mit der RAISERROR
– Anweisung können Sie Ihre eigenen Fehlermeldungen generieren und diese im selben Format wie eine von der SQL Server-Datenbank-Engine generierte Systemfehler-oder Warnmeldung an die Anwendung zurückgeben. Darüber hinaus können Sie mit der Anweisung RAISERROR
eine bestimmte Nachrichten-ID, den Schweregrad und den Status für die Fehlermeldungen festlegen.,
Das Folgende veranschaulicht die Syntax derRAISERROR
Anweisung:
Untersuchen wir die Syntax derRAISERROR
zum besseren Verständnis.
message_id
Die message_id
ist eine benutzerdefinierte Fehlernachrichtennummer, die in der sys.messages
Katalogansicht gespeichert ist.
Um eine neue benutzerdefinierte Fehlernachrichtennummer hinzuzufügen, verwenden Sie die gespeicherte Prozedur sp_addmessage
. Eine benutzerdefinierte Fehlermeldungsnummer sollte größer als 50.000 sein., Standardmäßig verwendet die Anweisung RAISERROR
die Anweisung message_id
, um einen Fehler auszulösen.,
Die folgende Anweisung fügt der Ansicht sys.messages
eine benutzerdefinierte Fehlermeldung hinzu:
Um die Einfügung zu überprüfen, verwenden Sie die folgende Abfrage:
Code language: SQL (Structured Query Language) (sql)
Um diese message_id zu verwenden, führen Sie die Anweisung RAISEERROR
wie folgt aus:
Code language: SQL (Structured Query Language) (sql)
Hier ist die Ausgabe:
Code language: SQL (Structured Query Language) (sql)
Um eine Nachricht aus der sys.messages
zu entfernen, verwenden Sie die gespeicherte Prozedur sp_dropmessage
., Die folgende Anweisung löscht beispielsweise die Nachrichten-ID 50005:
Code language: SQL (Structured Query Language) (sql)
message_text
Die message_text
ist eine benutzerdefinierte Nachricht mit einer Formatierung wie der printf
-Funktion in der C-Standardbibliothek. Die message_text
kann bis zu 2.047 Zeichen betragen, 3 letzte Zeichen sind für Ellipsen (…) reserviert. Wenn die message_text
2048 oder mehr enthält, wird sie abgeschnitten und mit einer Ellipse aufgefüllt.,
Wenn Sie die message_text
angeben, verwendet die RAISERROR
Anweisung message_id 50000, um die Fehlermeldung auszulösen.
Im folgenden Beispiel wird die Anweisung RAISERROR
verwendet, um einen Fehler mit einem Nachrichtentext auszulösen:
Code language: SQL (Structured Query Language) (sql)
Die Ausgabe sieht folgendermaßen aus:
Code language: SQL (Structured Query Language) (sql)
Schweregrad
Die Schweregradstufe ist eine Ganzzahl zwischen 0 und 25, wobei jede Stufe die Schwere des Fehlers darstellt.
Code language: SQL (Structured Query Language) (sql)
Zustand
Der Zustand ist eine Ganzzahl von 0 bis 255., Wenn Sie denselben benutzerdefinierten Fehler an mehreren Stellen auslösen, können Sie für jeden Speicherort eine eindeutige Statusnummer verwenden, um leichter herauszufinden, welcher Abschnitt des Codes die Fehler verursacht. Für die meisten Implementierungen können Sie 1 verwenden.
MIT Option
kann die Option LOG
, NOWAIT
oder SETERROR
:
-
WITH LOG
protokolliert den Fehler im Fehlerprotokoll und Anwendungsprotokoll für die Instanz der SQL Server-Datenbank-Engine., -
WITH NOWAIT
sendet die Fehlermeldung an den client sofort. -
WITH SETERROR
setzt dieERROR_NUMBER
und@@ERROR
Werte auf message_id oder 50000, unabhängig von der Schweregradstufe.
SQL Server-RAISERROR-Beispiele
nehmen wir einige Beispiele für die Verwendung der RAISERROR
– Anweisung bekommen, ein besseres Verständnis.,
A) Verwenden von SQL Server RAISERROR mit TRY CATCH block example
In diesem Beispiel verwenden wir den RAISERROR
in einem TRY
Block, damit die Ausführung zum zugehörigen CATCH
Block springt. Innerhalb desCATCH
– Blocks verwenden wir dieRAISERROR
, um die Fehlerinformationen zurückzugeben, die denCATCH
– Block aufgerufen haben.,
Hier ist die Ausgabe:
Code language: SQL (Structured Query Language) (sql)
B) Verwenden einer SQL Server RAISERROR-Anweisung mit einem dynamischen Nachrichtentext Beispiel
Das folgende Beispiel zeigt, wie eine lokale Variable verwendet wird, um den Nachrichtentext für eine RAISERROR
– Anweisung bereitzustellen:
Die Ausgabe lautet wie folgt:
Code language: SQL (Structured Query Language) (sql)
div>
Wenn RAISERROR Anweisung
Verwenden Sie die RAISERROR
Anweisung in den folgenden Szenarien:
- Fehlerbehebung Transact-SQL-Code.
- Gibt Nachrichten zurück, die variablen Text enthalten.
- Untersuchen Sie die Werte der Daten.,
- Bewirkt, dass die Ausführung von einem
TRY
– Block zum zugehörigenCATCH
– Block springt. - Gibt Fehlerinformationen aus dem
CATCH
– Block an die Anrufer zurück, die entweder batch oder application aufrufen.
In diesem Tutorial erfahren Sie, wie Sie mit der Anweisung SQL Server RAISERROR
benutzerdefinierte Fehlermeldungen generieren.