2010-08-07 12 views
5

Wie kann ich die Prozedur so schreiben, dass ich alle INSERT-, UPDATE- und DELETE-Anweisungen ROLLBACK ausführen kann, wenn ANY-Anweisungen einen Fehler enthalten.Zurücksetzen der gesamten Prozedur (alle Anweisungen)

Bitte beachten Sie, dass mein Verfahren möglicherweise Anweisungen in der Reihenfolge aufgeführt haben und möglicherweise nicht haben. Mit anderen Worten, ich habe eine INSERT-Anweisungen, dann eine IF-Logik, dann eine SELECT-Anweisung, dann eine andere INSERT, dann eine UPDATE, gefolgt von Logik, dann DELETE-Anweisung usw.

Ich möchte nur alle INSERT ROLLBACK, UPDATE und DELETE-Anweisungen, wenn Fehler für eine Anweisung aufgetreten sind. Ich fand diesen Code http://msdn.microsoft.com/en-us/library/ms181299.aspx und http://en.allexperts.com/q/MS-SQL-Server-1801/Rollback-SP.htm

Aber sie beantworten meine Frage nicht.

Antwort

4

Wenn die Transaktion mit der Option XACT_ABORT ausgeführt wird, geschieht dies automatisch.

Hier ist eine ziemlich interesting question diskutieren mit dieser vs strukturierte Fehlerbehandlung.

2

Sehen Sie sich an, wie TRANSACTION funktioniert (der Link, den Sie angeben, verwendet ihn auch, aber die Transaktion scheint aufgrund der DTS-Interaktion fehlgeschlagen zu sein). Grundsätzlich können Sie alles zurücksetzen, was Sie getan haben, seit Sie signalisiert haben, dass Sie Ihre Transaktion starten.

Martin Smith answer with xact_abort is desribed in more detail here.

2

Was Sie beschreiben, heißt "Database Transaction Processing". Es erstellt ein Konstrukt, das "alles oder nichts" in Bezug auf das Schreiben von Daten in Ihre Datenbank ist.

Es wird ein logischer Rahmen erstellt, in dem alle Tabellen zusammen aktualisiert werden. Wenn jedoch eine Tabelle nicht aktualisiert werden kann, wird die gesamte Transaktion in einen vorherigen Status zurückgesetzt.

Die meisten DB's machen es so. Pseudocode folgt.

 
Begin transaction 
    Update Table One 
    Update table Two 
    [Update lots of tables] 
    if all updates successfull 
     commit (All changes to all tables) 
    else 
     rollback (All changes) 
End transaction 

Beachten Sie, dass die Begriffe „Transaktion“, „begehen“ und „Rollback“ sind in der Regel die technischen Bedingungen von den meisten DB als gut.

Link, der es besser erklären könnte als ich bin. http://www.subbu.org/articles/nuts-and-bolts-of-transaction-processing

Suchen Sie in den Dokumenten Ihrer Datenbank, und Sie sollten Referenzen zu all dem finden.

HTH, wenn nicht Kommentar und ich werde es erneut versuchen. :-)

Verwandte Themen