Zurück zu: SQL Server-Tutorial Für Anfänger und Profis
Wie kann ich Fehler Explizit in SQL Server
In diesem Artikel Ich werde diskutieren, wie man den Fehler explizit in SQL Server mit einigen Beispielen, zusammen mit wir werden auch besprechen die verschiedenen Optionen, die wir verwenden können, mit der Raiserror-Anweisung in SQL Server., Bitte lesen Sie unseren vorherigen Artikel, in dem wir das Echtzeitbeispiel der Fehlersystemfunktion besprochen haben. Als Teil dieses Artikels werden wir die folgenden Hinweise diskutieren.
- Wie kann man Fehler explizit in SQL Server auslösen?
- Raise error Verwendung von RAISERROR-Anweisung in SQL Server
- Fehler mit throw-Anweisung in SQL Server
- Was ist der Unterschied zwischen RAISERROR-Funktion und die throw-Anweisung?
- Verständnis der RaiseError Anweisung mit Log Option.
- So lösen Sie Fehler aus, indem Sie die Fehlermeldung in der SysMessage-Tabelle speichern.,
Wie kann man Fehler explizit in SQL Server auslösen?
Im Allgemeinen werden Fehler in einem Programm aus vordefinierten Gründen wie Teilen einer Zahl durch Null, Verletzung des Primärschlüssels, Verletzung der Überprüfung, Verletzung der referenziellen Integrität usw. ausgelöst. Aber wenn wir wollen, dann können wir auch einen Fehler in Ihren Programmen auf zwei verschiedene Arten auslösen.,
- Raiserror-Anweisung
- throw-Anweisung (neues feature von SQL Server 2012)
Raiserror-Anweisung Syntax: Raiserror (errorid/errormsg, SCHWEREGRAD, Status)
werfen Syntax: Werfen errorid, errormsg, Zustand
Beispiel: Fehler mit RAISERROR-Anweisung in SQL Server.
In der folgenden gespeicherten Prozedur wird ein Fehler ausgelöst, wenn die Division 1 ist, indem die RAISERROR Anweisung verwendet wird.,
Beispiel der Ausführung: EXEC spDivideBy1 10, 1
Beispiel: Fehler mit throw-Anweisung in SQL Server.
Die obige Prozedur kann auch mit Hilfe einer throw-Anweisung anstelle von Raiserror wie folgt umgeschrieben werden.,
AUSFÜHRUNG: EXEC spDivideBy2 10, 1
Was ist der Unterschied zwischen RAISERROR-Funktion und die throw-Anweisung?
Wenn wir eine der beiden Anweisungen in einem Programm verwenden, um einen Fehler ohne try-and-Catch-Blöcke auszulösen, setzt die RAISERROR-Anweisung nach dem Auslösen des Fehlers die Ausführung des Programms fort, während die throw-Anweisung das Programm in dieser Zeile abnormal beendet., Wenn sie jedoch unter try block verwendet werden, verhalten sich beide auf die gleiche Weise, die direkt zum catch Block springt, von wo aus der Fehler ausgelöst wurde.
Die RAISERROR-Anweisung gibt die Option an, den SCHWEREGRAD der Fehlermeldung anzugeben, während wir diese Option im Falle einer throw-Anweisung nicht haben, bei der alle Fehlermeldungen einen Standardschweregrad von 16 haben.,
Im Falle von RAISERROR besteht die Möglichkeit, die Fehlermeldung mithilfe der Option with log in die Serverprotokolldatei aufzunehmen, während dies bei einer throw-Anweisung nicht möglich ist.
Im Falle von throw müssen wir sowohl die errorid als auch die Fehlermeldung angeben, um den Fehler auszulösen, während wir im Falle von RAISERROR entweder id oder message angeben können., Wenn die ID nicht angegeben ist Standardfehler-ID ist 50000 Wenn wir jedoch zuerst nur Fehler-ID angeben möchten, müssen wir die Fehlermeldung in der Sysmessage-Tabelle hinzufügen, indem wir der Tabelle eine eindeutige ID angeben.
OPTIONEN MIT RAISERROR-ANWEISUNG:
Mit Log: Mit dieser Option in der RAISERROR-Anweisung können wir die Fehlermeldung in der SQL Server-Protokolldatei aufzeichnen, sodass der Datenbankadministrator bei schwerwiegenden Fehlern diese Fehler beheben kann.,
Wenn der Schweregrad des Fehlers größer als 20 ist, ist die Angabe der Option With Log obligatorisch. Um dies zu testen, ÄNDERN Sie die Prozedur spDivideBy1, indem Sie die raiserror-Anweisung wie folgt ändern
RAISERROR (‚DIVISOR KANN NICHT EINS SEIN‘, 16, 1) MIT LOG
Unten ist die vollständige Prozedur
Führen Sie nun die Prozedur aus und wann immer der angegebene Fehler auftritt, können wir die unter SQL aufgezeichneten Fehlermeldungen Server-Protokolldatei. Um die Protokolldatei anzuzeigen., Wechseln Sie im Objekt-Explorer zum SQL Server-Protokollknoten Management Node und öffnen Sie die aktuelle Protokolldatei, indem Sie wie unten gezeigt darauf doppelklicken.,g
RAISERROR (‚THE NUMBER %d CANNOT BE DIVIDED BY %d‘,16, 1, @No1, @No2)WITH LOG
Raising Errors By storing the Error message in SysMessage table:
Wir können einen Fehler auslösen, ohne die Fehlermeldung in der RAISERROR-Anweisung anzugeben, aber anstelle der Fehlermeldung müssen wir die Fehler-ID angeben und um die Fehler-ID anzugeben, müssen wir diese Fehler-ID mit der Fehlermeldung in der SysMessage-Tabelle mit der vom System definierten Prozedur „SP_ADDMESSAGE“aufzeichnen., 16, ‚Division DURCH EINEN FEHLER‘
Jetzt ändern Sie das Verfahren durch die änderung der RAISERROR-Anweisung wie folgt
RAISERROR (51000,16, 1)MIT LOG –
das Löschen der Fehlermeldungen aus sysmessages Tabelle:
Syntax: SP_DROPMESSAGE <Fehler-id>
Beispiel: EXEC sp_dropMessage 51000
Im nächsten Artikel werde ich diskutieren die try-catch-Umsetzung in SQL-Server mit der Fehlermeldung in SQL Server., Hier versuche ich in diesem Artikel Schritt für Schritt anhand einiger Beispiele zu erklären, wie Fehler in SQL Server explizit ausgelöst werden.