Skip to main content

Verwenden von TRY ... CATCH zum Behandeln von SQL Server-Fehlern

Microsoft Azure OpenDev—June 2017 (Kann 2024)

Microsoft Azure OpenDev—June 2017 (Kann 2024)
Anonim

Die Anweisung TRY… CATCH in Transact-SQL erkennt Fehlerbedingungen in Datenbankanwendungen und behandelt diese. Diese Anweisung ist der Grundstein für die Fehlerbehandlung von SQL Server und ist ein wichtiger Bestandteil bei der Entwicklung robuster Datenbankanwendungen. TRY … CATCH gilt für SQL Server ab 2008, Azure SQL-Datenbank, Azure SQL Data Warehouse und Parallel Data Warehouse.

Einführung in TRY … CATCH

TRY … CATCH ermöglicht es Ihnen, zwei Transact-SQL-Anweisungen anzugeben: eine, die Sie "ausprobieren" möchten, und eine andere, die verwendet werden soll, um mögliche Fehler zu "fangen". Wenn SQL Server auf eine Anweisung TRY … CATCH stößt, führt es sofort die in der TRY-Klausel enthaltene Anweisung aus. Wenn die TRY-Anweisung erfolgreich ausgeführt wird, fährt SQL Server fort. Wenn die TRY-Anweisung jedoch einen Fehler generiert, führt SQL Server die CATCH-Anweisung aus, um den Fehler ordnungsgemäß zu behandeln.

Die grundlegende Syntax hat folgende Form:

Beginnen Sie zu versuchen Anweisungsblock ENDE VERSUCHENBEGIN CATCHsql_statementEND CATCH ;

TRY … CATCH Beispiel

Es ist leicht, die Verwendung dieser Aussage anhand eines Beispiels zu verstehen. Stellen Sie sich vor, Sie sind der Administrator einer Personaldatenbank, die eine Tabelle mit dem Namen "Employees" enthält, die Informationen zu den einzelnen Mitarbeitern Ihrer Organisation enthält. Diese Tabelle verwendet eine ganzzahlige Mitarbeiter-ID-Nummer als Primärschlüssel. Sie können versuchen, die folgende Anweisung zu verwenden, um einen neuen Mitarbeiter in Ihre Datenbank einzufügen:

INSERT INTO-Mitarbeiter (ID, Vorname, Nachname, Erweiterung)WERTE (12497, 'Mike', 'Chapple', 4201)

Unter normalen Umständen fügt diese Anweisung der Employees-Tabelle eine Zeile hinzu. Wenn jedoch bereits ein Mitarbeiter mit der ID 12497 in der Datenbank vorhanden ist, würde das Einfügen der Zeile die Primärschlüsseleinschränkung verletzen und zu folgendem Fehler führen:

Meldung 2627, Ebene 14, Status 1, Zeile 1Verletzung der PRIMARY KEY-Einschränkung 'PK_employee_id'. Es kann kein doppelter Schlüssel in Objekt 'dbo.employees' eingefügt werden.Die Anweisung wurde beendet.

Während dieser Fehler Ihnen die Informationen liefert, die Sie zur Behebung des Problems benötigen, gibt es zwei Probleme. Erstens ist die Nachricht kryptisch. Es enthält Fehlercodes, Zeilennummern und andere Informationen, die für den durchschnittlichen Benutzer unverständlich sind. Zweitens, und was noch wichtiger ist, führt dies zum Abbruch der Anweisung und zu einem Absturz der Anwendung.Alternativ können Sie die Anweisung in eine TRY… CATCH-Anweisung einschließen, wie hier gezeigt:

Beginnen Sie zu versuchenINSERT INTO-Mitarbeiter (ID, Vorname, Nachname, Erweiterung)WERTE (12497, 'Mike', 'Chapple', 4201)ENDE VERSUCHENBEGIN CATCHDRUCKEN 'FEHLER:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Mitarbeiterpost',@ Empfänger = "[email protected]",@body = 'Beim Erstellen eines neuen Mitarbeiterdatensatzes ist ein Fehler aufgetreten.',@subject = 'Mitarbeiter-ID-Duplizierungsfehler';END CATCH

In diesem Beispiel werden alle auftretenden Fehler sowohl dem Benutzer, der den Befehl ausführt, als auch der E-Mail-Adresse [email protected] gemeldet. Der Fehler, der dem Benutzer angezeigt wird, ist:

Fehler: Verletzung der PRIMARY KEY-Einschränkung 'PK_employee_id'. Es kann kein doppelter Schlüssel in Objekt 'dbo.employees' eingefügt werden.Mail in der Warteschlange

Die Ausführung der Anwendung wird normal fortgesetzt, sodass der Programmierer den Fehler behandeln kann. Die Verwendung der Anweisung TRY … CATCH ist eine elegante Methode zum proaktiven Erkennen und Behandeln von Fehlern, die in SQL Server-Datenbankanwendungen auftreten.

Mehr lernen

Wenn Sie mehr über die strukturierte Abfragesprache erfahren möchten, lesen Sie die Einführung in SQL.