1

誰か助けてください。

ジョブにいくつかのストアド プロシージャがあり、そのうちの 1 つでトランザクションを開始していくつかの行を削除し、行が 10 を超える場合はロールバックします。ただし、2 つのストアド プロシージャの後で似たようなことを行うため、すぐにコミットしたくありません。ただし、このインスタンスで count が 10 より大きい場合は、トランザクションを開始したとき (2 つのストアド プロシージャの前) までロールバックしたい

ストア プロシージャでトランザクションを開始し、複数のロールバックを行い、最後にコミットすることは可能ですか?それを行うには、すべてのコードを 1 つのストア プロシージャに入れる必要がありますか?

4

1 に答える 1

2

@@TRANCOUNT を使用して、コミットされていない未処理のトランザクションがあるかどうかを判断し、それを使用してストアド プロシージャのロジックを指示することができます。

CREATE PROCEDURE Proc1
AS
BEGIN
    BEGIN TRANSACTION
    // DO STUFF
    IF (@@ROWCOUNT > 10)
        ROLLBACK TRANSACTION
END

CREATE PROCEDURE Proc2
AS
BEGIN
    IF (@@TRANCOUNT > 0)
    BEGIN
        // DO STUFF
        IF (@@ROWCOUNT > 10)
            ROLLBACK TRANSACTION
    END
END

CREATE PROCEDURE Proc3
AS
BEGIN
    IF (@@TRANCOUNT > 0)
    BEGIN
        // DO STUFF
        IF (@@ROWCOUNT > 10)
            ROLLBACK TRANSACTION
        ELSE
            COMMIT TRANSACTION
    END
END
于 2013-08-29T14:39:48.653 に答える