Verwenden von TRY/CATCH zur Behandlung von SQL Server-Fehlern Error

Die TRY/CATCH-Anweisung in Transact-SQL erkennt und behandelt Fehlerbedingungen in Datenbankanwendungen. Diese Aussage ist der Grundstein von SQL Serverfehlerbehandlung 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 funktioniert, indem zwei Transact-SQL-Anweisungen angegeben werden: eine, die Sie "versuchen" möchten, und eine andere, um eventuell auftretende Fehler "abzufangen". Wenn SQL Server auf eine TRY/CATCH-Anweisung stößt, wird die in der TRY-Klausel enthaltene Anweisung sofort ausgeführt. 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 diese Form:

STARTEN SIE AUSPROBIEREN
{ sql_statement | Anweisungsblock }
VERSUCHEN ENDE
Fangen Sie an
[ { sql_statement | Anweisungsblock } ]
ENDE FANG
[; ]
instagram viewer

TRY/CATCH-Beispiel

Stellen Sie sich eine Personaldatenbank vor, die eine Tabelle namens enthält Angestellte, die Informationen zu jedem Mitarbeiter eines Unternehmens 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, Durchwahl)
WERTE(12497, 'Mike', 'Chapple', 4201)

Unter normalen Umständen würde diese Anweisung der Employees-Tabelle eine Zeile hinzufügen. Existiert jedoch bereits ein Mitarbeiter mit der ID 12497 in der Datenbank, würde das Einfügen der Zeile gegen die Primärschlüsseleinschränkung verstoßen und zu folgendem Fehler führen:

Nachricht 2627, Ebene 14, Zustand 1, Zeile 1 Line
Verletzung der PRIMARY KEY-Einschränkung 'PK_employee_id'. Kann keinen doppelten Schlüssel in das Objekt 'dbo.employees' einfügen.
Die Anweisung wurde beendet.

Während dieser Fehler Ihnen die Informationen liefert, die Sie zur Behebung des Problems benötigen, gibt es zwei Probleme damit. Erstens ist die Nachricht kryptisch. Es enthält Fehlercodes, Zeilennummern und andere Informationen, die für den durchschnittlichen Benutzer unverständlich sind. Zweitens, und noch wichtiger, führt dies zum Abbruch der Anweisung und kann zum Absturz der Anwendung führen.

Die Alternative besteht darin, die Anweisung in eine TRY…CATCH-Anweisung einzuschließen, wie hier gezeigt:

STARTEN SIE AUSPROBIEREN
INSERT INTO Mitarbeiter( ID, Vorname, Nachname, Durchwahl)
WERTE(12497, 'Mike', 'Chapple', 4201)
VERSUCHEN ENDE
Fangen Sie an
PRINT 'FEHLER: ' + ERROR_MESSAGE( );
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Mitarbeiterpost',
@recipients = '[email protected]',
@body = 'Beim Erstellen eines neuen Mitarbeiterdatensatzes ist ein Fehler aufgetreten.',
@subject = 'Fehler in der Mitarbeiterdatenbank' ;
ENDE FANG

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

Fehler: Verletzung der PRIMARY KEY-Einschränkung 'PK_employee_id'. 
Kann keinen doppelten Schlüssel in das Objekt 'dbo.employees' einfügen.
E-Mail in der Warteschlange.

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

Mehr lernen

Um mehr über die strukturierte Abfragesprache zu erfahren, lesen Sie unseren Artikel Grundlagen von SQL.