11

私はSQLサーバーでネストされたトランザクション全体を整理してきました.ネストされたトランスの動作を理解するためのこれらのナゲットを輝かせました。

  • トランザクションをネストする場合、最も外側のコミットのみが実際にコミットされます。
  • 「Commit Trans txn_name」は、ネストされている場合、txn_name が外側のトランザクションを参照している場合でも、常に最も内側のトランザクションに適用されます。
  • "ROLLBACK TRAN" (名前なし) は、内部トランザクションであっても、すべてのトランザクションをロールバックします。
  • "ROLLBACK TRAN txn_name" - txn_name は、最も外側の txn 名を参照する必要があります。そうでない場合、失敗します。

これらを考えると、トランザクションに名前を付ける利点はありますか? コミットまたはロールバックのいずれかで、特定のトランザクションをターゲットにするために使用することはできません。コードのコメント化のみを目的としていますか?

ありがとう、

ヨニ

4

3 に答える 3

8

事実上、これは単なるプログラマー補佐の回顧録です。多数の内部トランザクションを持つ Tx を扱っている場合、それぞれに意味のある名前を付けると、トランザクションが適切にネストされ、論理エラーをキャッチできるようになります。

于 2009-08-14T23:43:06.987 に答える
2

エラーが発生した場合にプロシージャーに自身の作業のみをロールバックさせることができるため、呼び出し元はトランザクション全体を放棄するか、回復して別のパスを試すかを決定できます。このアトミックな動作を可能にするプロシージャ テンプレートについては、例外処理とネストされたトランザクションを参照してください。

于 2009-08-13T17:25:09.757 に答える
0

アイデアは、ネストされたトランザクションのように、作業の一部をロールバックすることです。常に意図したとおりに機能するとは限りません。古いスタイルのエラー処理とセーブポイントを使用するストアド プロシージャは、TRY … CATCH ブロックと一緒に使用すると、意図したとおりに機能しない可能性があります:エラー処理の古いスタイルと新しいスタイルを混在させないでください。

すでにここで議論されています@@ERROR および/または TRY - CATCH

于 2009-08-13T18:01:30.980 に答える