質問

独自のトランザクションを管理するストアド プロシージャがあるとします。

CREATE PROCEDURE theProc
AS
BEGIN

  BEGIN TRANSACTION

-- do some stuff

  IF @ThereIsAProblem
    ROLLBACK TRANSACTION
  ELSE
    COMMIT TRANSACTION
END

既存のトランザクションからこのプロシージャを呼び出すと、プロシージャは外部トランザクションを ROLLBACK できます。

BEGIN TRANSACTION
EXEC theProc
COMMIT TRANSACTION

ストアド プロシージャが外部トランザクションをロールバックしないように、ストアド プロシージャ内でトランザクションのスコープを適切に設定するにはどうすればよいですか?

役に立ちましたか?

解決

これを行うための構文はデータベースによって異なる可能性があります。ただし、Transact-SQL では、@@TRANCOUNT をチェックしてトランザクション中かどうかを確認するだけです。その場合は、セーブポイントを作成し、最後に関数の最後を通過するか (後でコミットまたはロールバックが行われると考えて)、セーブポイントにロールバックすることができます。

Microsoft のドキュメントを参照してください。 セーブポイント 多くのための。

セーブポイントのサポートはかなり広く普及していますが、現在トランザクション中であることを確認するためのメカニズム (それがあると仮定して) はかなり異なると思います。

他のヒント

@@trancount を使用して、入力時にすでにトランザクション中かどうかを確認します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top