4

以前は、SQL Server のストアド プロシージャ内で次のコード スニペットを使用していました。

create procedure proc_name
    --declare variables
as
    set nocount on
    begin transaction
    begin try
        --do something
        commit transaction
    end try begin catch
        rollback transaction
        ;throw
    end catch
go

しかし、今日、「set xact_abort on」ステートメントを知りました。次のコードは前のコードと同等ですか? それらの間に違いはありますか?

create procedure proc_name
    --declare variables
as
    set nocount on
    set xact_abort on
    begin transaction
    --do something
    commit transaction
go
4

1 に答える 1

4

MSドキュメントからの引用

TRY…CATCH コンストラクトは、重大度が 10 よりも高く、データベース接続を閉じないすべての実行エラーをキャッチします。

そのため、try catch は考えられるすべてのエラーをキャッチするわけではありません。try catch に加えて、xact_abort on を使用できます。

try/catch を使用すると、柔軟性が向上します。つまり、何かがうまくいかない場合のロールバックだけに限定されません。

于 2014-01-09T20:21:38.687 に答える