Verwenden von RAISERROR mit THROW, um einen SQL Server-Systemfehler auszulösen

Veröffentlicht in: Articles | 0

THROW ersetzt RAISERROR in SQL Server und es ist die bevorzugte Methode, um Fehlermeldungen auszulösen und sie an den aufrufenden Code zu senden. THROW ist eigentlich viel intuitiver als RAISERROR, soweit Ihr Code darauf reagiert.

THROW wurde als Mittel erstellt, um den Fehlerbehandlungscode in aktuellen Programmiersprachen genauer abzugleichen. RAISERROR gibt es seit 1998 und wurde erstmals in SQL Server 7.0 veröffentlicht., THROW wurde erstmals in SQL Server 2012 enthalten.

RAISERROR ist immer noch in aktuellen Versionen von SQL Server enthalten, aber es gibt bemerkenswerte Unterschiede zwischen der Art und Weise, wie SQL fließt, wenn RAISERROR aufgerufen wird, und dem Zeitpunkt, an dem THROW aufgerufen wird. Insbesondere stoppt RAISERROR die Ausführung der aktuellen Prozedur nicht, während THROW immer die aktuelle Prozedur stoppt und den Fehler an die aufrufende Prozedur weitergibt.

THROW like RAISERROR können Sie benutzerdefinierte Fehler“ auslösen“, aber es stoppt sofort den aktuellen Prozess und gibt den Fehler an die aufrufende Prozedur zurück.,Mit

THROW können Sie so ziemlich alles tun, was RAISERROR erlaubt, mit einer bemerkenswerten Ausnahme: THROW erlaubt Ihnen nicht, SQL Server-Systemfehler auszulösen. Wenn Sie jedoch einen Systemfehler auslösen müssen, können Sie dies weiterhin tun, indem Sie zuerst RAISERROR in einem TRY-BLOCK verwenden und THROW im entsprechenden CATCH-Block verwenden, um den Systemfehler auszulösen.

BEISPIEL:

– Die folgende Anweisung führt zu einem Fehler, da THROW keine Systemausnahmen auslösen kann:
THROW 40655, ‚ Database master cannot be restored.,‘, 1;

ERGEBNISSE:

Msg 35100, Ebene 16, Status 10, Zeile 2,
Fehler Anzahl 40655 in die THROW-Anweisung ist außerhalb des gültigen Bereichs. Geben Sie eine Fehlernummer im gültigen Bereich von 50000 bis 2147483647 an.

Sie können diese Einschränkung des THROWS umgehen, indem Sie Systemausnahmen nicht auslösen können, indem Sie sie in Verbindung mit RAISERROR in einem TRY/CATCH-Block verwenden:

– Systemausnahme auslösen, indem Sie RAISERROR zuerst in einem TRY/CATCH-Block verwenden.,
BEGINNEN, VERSUCHEN
PRINT ‚Begin Try‘;
RAISERROR (40655, 16, 1);
‚ PRINT ‚End Try‘;
END TRY

BEGINNEN Sie zu FANGEN
‚ PRINT ‚Begin Catch / Before Throwing Error‘;
WERFEN;
‚ PRINT ‚End Catch / Nach dem Werfen Fehler‘;
END CATCH;

DRUCKEN „Nach dem Try/Catch‘;

ERGEBNISSE:

Beginnen Sie Versuchen
Beginnen Fangen / Werfen, Bevor Fehler
Msg 40655, Ebene 16, Status 1, Zeile 3
Datenbank „master“ nicht wiederhergestellt werden kann.,

Wie Sie in den Ergebnissen sehen können, stoppt RAISERROR den Prozessfluss nicht, sondern ermöglicht es Ihnen, die Systemfehler auszulösen, und THROW stoppt den Prozessfluss und ermöglicht es Ihnen, Systemfehler, die Sie mit RAISERROR auslösen, auf den aufrufenden Prozess auszulösen. Wenn Sie die beiden Anweisungen zusammen verwenden, haben Sie die volle Kontrolle über die Fehlermeldungen und wann sie an die aufrufende Prozedur zurückgegeben werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.