Richtig Transaktionen in Stored Procs scoped
-
01-07-2019 - |
Frage
Angenommen, ich eine gespeicherte Prozedur, die eine eigene Transaktion
verwaltetCREATE PROCEDURE theProc
AS
BEGIN
BEGIN TRANSACTION
-- do some stuff
IF @ThereIsAProblem
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
END
Wenn ich diese Prozedur aus einer vorhandenen Transaktion aufrufen, kann die Prozedur der externen Transaktion verbucht.
BEGIN TRANSACTION
EXEC theProc
COMMIT TRANSACTION
Wie kann ich richtig Umfang die Transaktion innerhalb der Prozedur gespeichert, so dass die gespeicherte Prozedur externer Transaktionen nicht Rollback?
Lösung
Die Syntax, dies zu tun variiert wahrscheinlich von Datenbank. Aber in Transact-SQL, was Sie tun, ist zu überprüfen @@ TRANCOUNT, um zu sehen, ob Sie in einer Transaktion sind. Wenn Sie dann wollen Sie ein Sicherungspunkt erstellen, und am Ende kann man nur das Ende der Funktion durchlaufen (gläubigen ein Commit oder Rollback wird später geschehen) oder auch Rollback auf Ihrer Speicherpunkt.
Siehe Microsoft-Dokumentation auf Savepoints mehr.
Unterstützung für Sicherungspunkte ist ziemlich verbreitet, aber ich denke, den Mechanismus (unter der Annahme einer ist), um herauszufinden, dass Sie sich gerade in einer Transaktion sind wird ziemlich viel variieren.
Andere Tipps
@@ trancount verwenden, um zu sehen, wenn Sie bereits in einer Transaktion sind bei der Eingabe von