HINWEIS
Kapitel 10: SQL Server
ROLLBACK TRANSACTION
END
...
Mit Hilfe der Argumente lassen sich Detaildaten auf einfache Weise im Messagetext platzieren. Sie müssen
nicht lange Stringaddition und Typumwandlungen vornehmen.
CREATE PROCEDURE "Test" @nachname VARCHAR(30)
as
...
RAISERROR (' %s kann nicht in die Datenbank eingefügt werden!',16,-1,@nachname)
...
return
Nach dem direkten Aufruf der Prozedur aus Access mit dem Namen »Müller« erhalten Sie das folgende
Dialogfeld:
Abbildung 10.38 Fehlermeldung
Etwas anders stellt sich die Situation in einem VBA-Programm dar. Hier kommt es zu einem Laufzeitfehler,
den Sie wie gewohnt mit On Error behandeln können.
Fehlerbehandlung mit TRY...CATCH
Endlich wurde auch für T-SQL eine moderne Fehlerbehandlung eingeführt, die nicht mehr aus dem Pro-
grammiermittelalter stammt. Als Visual Basic-Programmierer werden Sie sich schnell zu Hause fühlen,
handelt es sich doch um ein ganz bekanntes Konstrukt:
BEGIN TRY
{ SQL-Anweisungen }
END TRY
BEGIN CATCH
{ SQL-Anweisungen }
END CATCH
TRY…CATCH fängt nur Fehler mit einem Schweregrad größer 10 ab, niedrigere Schweregrade werden als
Warnungen interpretiert! Fehler mit einem Schweregrad größer 20 werden nur abgefangen, solange die Datenbank-Engine die
Verbindung nicht trennt.
Neben obigem Konstrukt stehen Ihnen auch noch folgende Funktionen (Tabelle 10.3) zur Verfügung:
656
HINWEIS
BEISPIEL
BEISPIEL
Funktion Beschreibung/Rückgabewert
ERROR_NUMBER Fehlernummer
ERROR_MESSAGE Fehlerbeschreibung
ERROR_SEVERITY Schweregrad
ERROR_STATE Fehlerstatusnummer (Gleiche Fehlernummern können unterschiedliche Ursachen aufweisen, zur Unter-
scheidung gibt es die Fehlerstatusnummer)
ERROR_LINE Zeilennummer
ERROR_PROCEDURE Name der Prozedur, des Triggers oder der Funktion in dem der Fehler aufgetreten ist
Tabelle 10.3 Funktionen zur Abfrage der Fehlerursache
Last but not least gibt es noch eine Anweisung, die im Zusammenhang mit der Fehlerbehandlung nutzbar
ist, das berüchtigte GOTO, mit dem Sie einen TRY- oder CATCH-Block »fluchtartig« verlassen können.
Wie Sie sehen, handelt es sich bei T-SQL nach wie vor um eine prozedurale Sprache, Kapselungen in Objekten
(z.B. Error) sind noch Zukunftsmusik (zumindest auf der Server-Seite).
Doch jetzt wollen wir uns der Praxis zuwenden.
Einfache Stored Procedure, die einen recht vorhersehbaren Fehler auslöst
CREATE PROCEDURE Test
AS
SELECT 10/0
return 0
Abbildung 10.39 Der zu erwartende Fehler
Wir wollen es besser machen ...
ALTER PROCEDURE Test
AS
BEGIN TRY
SELECT 10/0
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE(), ERROR_NUMBER(), ERROR_LINE(), ERROR_SEVERITY()
END CATCH
return 0
657
Fehlerbehandlung

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.