Behandeln von Fehlern des Datenbankmoduls

Viele von SQL Server Database Engine (Datenbankmodul) ausgelöste Fehler können programmgesteuert aufgezeichnet und behoben werden. Möglichkeiten zur Fehlerbehandlung werden durch die Transact-SQL-Sprache und durch die Anwendungsprogrammierschnittstellen (APIs, Application Programming Interfaces) für den Datenzugriff bereitgestellt, die von Anwendungen zum Zugriff auf die in Database Engine (Datenbankmodul) gespeicherten Daten verwendet werden.

Fehler aus Database Engine (Datenbankmodul) können auf zwei Ebenen behandelt werden:

  • Fehler können in Database Engine (Datenbankmodul) behandelt werden, indem Transact-SQL-Batches, gespeicherten Prozeduren, Triggern oder benutzerdefinierten Funktionen Fehlerbehandlungscode hinzugefügt wird.

  • Fehler können an die aufrufende Anwendung zurückgegeben und vom Anwendungscode behandelt werden. Jede der APIs, die von Anwendungen für die Zugriff auf Database Engine (Datenbankmodul) verwendet werden, stellt Mechanismen bereit, mit denen Informationen wieder zurück an die Anwendung übergeben werden können.

Thema

Beschreibung

Grundlegendes zu Datenbankmodulfehlern

Jeder Database Engine (Datenbankmodul)-Fehler enthält die folgenden Attribute: eine Fehlernummer, eine Meldungszeichenfolge, Schweregrad, Status, Name der Prozedur und Zeilennummer.

Abrufen von Fehlerinformationen in Transact-SQL

Mithilfe von Transact-SQL-Code können Informationen zu Fehlern mithilfe der Funktionen ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY, ERROR_STATE und @@ERROR abgerufen werden.

TRY...CATCH (Transact-SQL)

Fehler können in Transact-SQL-Code mithilfe eines TRY…CATCH-Konstrukts verarbeitet werden, das den Ausnahmeverarbeitungsfeatures der Sprachen Microsoft Visual C++ und Visual C# ähnelt. Wenn eine Fehlerbedingung in einem TRY-Block erkannt wird, wird die Steuerung an einen CATCH-Block übergeben, wo die Verarbeitung erfolgen kann.

Verwenden von TRY...CATCH in Transact-SQL

Fehler können in Transact-SQL-Code mithilfe eines TRY…CATCH-Konstrukts verarbeitet werden, das den Ausnahmeverarbeitungsfeatures der Sprachen Microsoft Visual C++ und Visual C# ähnelt. Wenn eine Fehlerbedingung in einem TRY-Block erkannt wird, wird die Steuerung an einen CATCH-Block übergeben, wo die Verarbeitung erfolgen kann.

Verwenden von RAISERROR

Die RAISERROR-Anweisung kann zum Auslösen benutzerdefinierter Fehler verwendet werden. Außerdem kann sie von einem CATCH-Block zum Übergeben der im CATCH-Block verarbeiteten Fehler an die Anwendung verwendet werden.

Verwenden von PRINT

Die PRINT-Anweisung kann zum Zurückgeben benutzerdefinierter Meldungen an die Anwendung verwendet werden.

Verwenden von @@ERROR

In früheren Versionen von SQL Server ist die @@ERROR-Funktion das primäre Mittel zum Erkennen von Fehlern in Transact-SQL-Anweisungen. TRY…CATCH-Konstrukte stellen verbesserte Funktionalität bereit.

Behandeln von Fehlern und Meldungen in Anwendungen

Jede Datenzugriffs-API, beispielsweise ActiveX Data Objects (ADO), OLE DB und Open Database Connectivity (ODBC), weisen Mechanismen auf, mit denen der Anwendung sämtliche von Database Engine (Datenbankmodul) empfangene Fehlerinformationen gemeldet werden können.

Schweregrade von Datenbankmodulfehlern

Database Engine (Datenbankmodul)-Fehler und benutzerdefinierte Fehlermeldungen werden mit Schweregraden von 1 bis 25 ausgelöst. sp_addmessage und RAISERROR können zum Generieren von benutzerdefinierten Fehlermeldungen verwendet werden.

Siehe auch

Verweis