25

次のコードスニペットを見たことがあります。いつif @@trancount > 0必要begin tryですか?それらの両方?または、チェックの前にロールバックされた場合に備えて、常にチェックするのが安全な方法(ベストプラクティス)ですか?

begin tran
begin try
  ... just several lines of sql ...
  if @@trancount > 0 commit tran
end try
begin catch
  if @@trancount > 0 rollback tran
end catch
4

4 に答える 4

8

を扱うときに考慮すべきいくつかのシナリオを考えることができます@@trancount

  1. 現在のトランザクションは、独自のトランザクションを持つ別のストアド プロシージャから呼び出されました
  2. 現在のトランザクションは、独自のトランザクションを持つ .NET コードによって呼び出されました
  3. 現在のトランザクションは唯一のトランザクションです

Remus Rusanu の例外処理とネストされたトランザクションは、これらすべての可能性を処理すると思います。

于 2012-12-21T04:33:17.117 に答える