Frage

Angenommen, ich eine gespeicherte Prozedur, die eine eigene Transaktion

verwaltet
CREATE 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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top