Der neu hinzugefügte Try-Catch in SQL Server 2005 kann Ausnahmen leicht abfangen. Ich werde ihn mir heute ansehen und die wichtigsten Punkte wie folgt zusammenfassen:
BEGIN TRY
{ sql_statement |
Anweisungsblock }
ENDE VERSUCH
Fangen Sie an
{ sql_statement |
Anweisungsblock }
ENDE FANG
, ähnlich der Verwendung der Ausnahmebehandlung in gewöhnlichen Sprachen, es ist jedoch zu beachten, dass SQL SERVER nur Ausnahmen abfängt, die nicht schwerwiegend sind, z. B. wenn keine Verbindung zur Datenbank hergestellt werden kann. Ein Beispiel ist: Beginnen Sie mit dem Versuch
DECLARE @X INT
– Durch Null dividieren, um einen Fehler zu erzeugen
SET @X = 1/0
PRINT 'Befehl nach Fehler im TRY-Block'
ENDE VERSUCH
Fangen Sie an
DRUCKEN „Fehler erkannt“
ENDE FANG
PRINT 'Befehl nach TRY/CATCH-Blöcken'
Darüber hinaus kann Try Catch in Begin TRY verschachtelt werden
Von GrandParent löschen, wobei Name = 'John Smith'
Drucken Sie „GrandParent erfolgreich gelöscht“
Beenden Sie den Versuch
Beginnen Sie mit dem Fangen
„Fehler beim Löschen des GrandParent-Datensatzes“ drucken
Beginnen Sie mit dem Versuch
Von Parent löschen, wobei GrandParentID =
(Wählen Sie eine eindeutige ID von GrandParent aus, wobei Name = „John Smith“).
„Übergeordnetes Element erfolgreich gelöscht“ drucken
Beenden Sie den Versuch
Beginnen Sie mit dem Fangen
print 'Fehler beim Löschen des übergeordneten Elements'
Beginnen Sie mit dem Versuch
Vom Kind löschen, wobei ParentId =
(Wählen Sie eine eindeutige ID vom übergeordneten Element aus, wobei GrandParentID =
(Wählen Sie eine eindeutige ID von GrandParent aus, wobei Name = 'John Smith' ist.))
Drucken Sie „Kind erfolgreich gelöscht“
Beenden Sie den Versuch
Beginnen Sie mit dem Fangen
„Fehler beim Löschen des Kindes“ drucken
Fang beenden
Fang beenden
Fang beenden
Darüber hinaus stellt SQL SERVER 2005 Fehlerklassenmethoden im Ausnahmemechanismus bereit, um das Debuggen zu erleichtern. Dies ist relativ einfach und wird nicht erläutert: Gibt eine mit dem Fehler verknüpfte Zahl zurück.ERROR_SEVERITY(): Gibt den Schweregrad des Fehlers zurück.ERROR_STATE(): Gibt die mit dem Fehler verknüpfte Fehlerstatusnummer zurück.ERROR_PROCEDURE(): Gibt den Namen der gespeicherten Prozedur oder des Triggers zurück, in der der Fehler aufgetreten ist.ERROR_LINE(): Gibt die Zeilennummer innerhalb der zurück Fehlerhafte Routine, die den Fehler verursacht hat: Gibt den vollständigen Text der Fehlermeldung zurück. Der Text enthält die angegebenen Werte für alle ersetzbaren Parameter, wie z. B. Längen, Objektnamen oder Zeiten. mit der Fehlerklassenmethode BEGIN TRY
DECLARE @X INT
– Durch Null dividieren, um einen Fehler zu erzeugen
SET @X = 1/0
PRINT 'Befehl nach Fehler im TRY-Block'
ENDE VERSUCH
Fangen Sie an
DRUCKEN „Fehler erkannt“
SELECT ERROR_NUMBER() ERNummer,
ERROR_SEVERITY() Error_Severity,
ERROR_STATE() Error_State,
ERROR_PROCEDURE() Fehler_Prozedur,
ERROR_LINE() Error_Line,
ERROR_MESSAGE() Fehlernachricht
ENDE FANG
PRINT 'Befehl nach TRY/CATCH-Blöcken'
Geben Sie abschließend „Fehler erkannt“ aus
Err_Num Err_Sev Err_State Err_Proc Err_Line Err_Msg
------- ------- --------- ------------------- ------- ----------------------------------
8134 16 1 NULL 4 Fehler Division durch Null aufgetreten.
Quelle: jackyrong BLOG