この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 コミットトランザクション
私は取引が初めてなので、例を挙げた説明はとても役に立ちます。ありがとう :)