1

このStackoverflowの質問を読みまし た TRY CATCH ROLLBACKパターンを含むネストされたストアドプロシージャ?

gbnが回答したトランザクション テンプレートについて明確にする必要があります。私はそこにコメントして尋ねることができませんでした。

CREATE PROCEDURE [Name]
AS
SET XACT_ABORT, NOCOUNT ON

DECLARE @starttrancount int

BEGIN TRY
    SELECT @starttrancount = @@TRANCOUNT

    IF @starttrancount = 0
        BEGIN TRANSACTION

       [...Perform work, call nested procedures...]

    IF @starttrancount = 0 
        COMMIT TRANSACTION
END TRY
BEGIN CATCH
    IF XACT_STATE() <> 0 AND @starttrancount = 0 
        ROLLBACK TRANSACTION
    RAISERROR [rethrow caught error using @ErrorNumber, @ErrorMessage, etc]
END CATCH
GO

私の質問は!

なぜ使用するのですか?

@@TRANCOUNT を直接使用するのではなく、 SELECT @starttrancount = @@TRANCOUNT ??

なぜこれをチェックするのですか?

IF @starttrancount = 0 BEGIN TRANSACTION

IF @starttrancount = 0 コミットトランザクション

私は取引が初めてなので、例を挙げた説明はとても役に立ちます。ありがとう :)

4

1 に答える 1