Re: Wie beendet man einen Trigger vorzeitig?
- From: Christoph Ingenhaag <ChristophIngenhaag@xxxxxxxxxxxxxxxxxxxxxxxxx>
- Date: Tue, 4 Mar 2008 04:05:01 -0800
"Elmar Boye" wrote:
Hallo Christoph,
Christoph Ingenhaag schrieb:
>
ein rollback im Trigger kann aber zu sehr viel Ungemach führen.
Der Aufrufer, der den Trigger ausgelöst hat, wird sich dann ggf. über
Msg 3903, Level 16, State 1, Line 1
The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.
Das passiert bei Triggern normalerweise nicht, da ein Trigger IMMER in
einer Transaktion stattfindet, einzig sollte man Uwes Beispielcode
noch durch eine @@TRANCOUNT Abfrage absichern, s. u.
Hallo Elmar,
das passiert dann, wenn bsplw. über eine Anwendung eine Transaktion geöffnet
wird. Wenn innerhalb dieser Transaktion in einem Trigger ein Rollback
erfolgt, weiss die Anwendung nichts davon.
Besonders ärgerlich wäre so ein Rollback in dem Fall, wenn vorher ein save
tran durchgeführt worden wäre. Das wär dann für die Katz...
Verantwortlich für ein Rollback oder Commit muss immer der Aufrufer sein,
oder das DBMS selbst (bei entsprechend schweren Fehlern), den nur hier ist
die Kompetenz vorhanden, die Konsequenzen der Beendigung der Transaktion im
Gesamtkontext genau dieser Transaktion beurteilen zu können.
IF @@TRANCOUNT > 0IF Bedingung
BEGIN
ROLLBACK TRANSACTION
RETURN
END
Mit Fehlermeldung...
IF Bedingung
BEGIN
RAISERROR ('Du hast was falsch gemacht', 11, 1)
IF @@TRANCOUNT > 0 ROLLBACK
RETURN
END
Da eine Triggerausführung wie du richtig erwähnst immer in einer Transaktion
stattfindet, und zwar genau in der Transaktion, die den Trigger ausgelöst
hat, wird Trancount immer grösser 0 sein.
wobei man immer einen Fehler (besser ab Stufe 16) melden sollte, da
ansonsten der Anwender rätselt, warum seine Daten nicht gespeichert
wurden.
Nich nur der Anwender, sondern ggf. andere Projektteammitglieder die an
anderen Schichten beschäftig sind, die sich dann fragen, was die Datenbank
da so treibt, oder die Qualitätssicherung.
siehe auch: http://www.sommarskog.se/error-handling-II.html
Gruß
Elmar
Also meine Empfehlung: Kein Rollback in Triggern, sondern Fehlermeldung.
Vg
Christoph
.
- Follow-Ups:
- Re: Wie beendet man einen Trigger vorzeitig?
- From: Elmar Boye
- Re: Wie beendet man einen Trigger vorzeitig?
- References:
- Wie beendet man einen Trigger vorzeitig?
- From: Nicholas
- Re: Wie beendet man einen Trigger vorzeitig?
- From: Uwe Ricken
- Re: Wie beendet man einen Trigger vorzeitig?
- From: Christoph Ingenhaag
- Re: Wie beendet man einen Trigger vorzeitig?
- From: Elmar Boye
- Wie beendet man einen Trigger vorzeitig?
- Prev by Date: Re: das Schaltjahr...
- Next by Date: Re: das Schaltjahr...
- Previous by thread: Re: Wie beendet man einen Trigger vorzeitig?
- Next by thread: Re: Wie beendet man einen Trigger vorzeitig?
- Index(es):
Relevant Pages
|