4

トランザクションがネストされていても、最も外側のトランザクションがコミットされるまで更新されません。では、ネストされたトランザクションの意味と、この機能が必要になる特定の状況は何でしょうか?

4

2 に答える 2

2

たとえば、次のような状況を想定します。

Class A
{
 /// props
 save();
}

class B
{
  A a{get;set};
  // other props
  save();
}

今、B を保存したい場合、最初に保存Aします。A を保存するときに検証などのサービス コールがあると仮定します。B を保存するときにこのような状況 (いくつかの検証) があるため、B検証できない場合はロールバックが必要です。 A を検証できないため、ネストする必要があります (実際には、懸念事項の分離が原因で、すべてのものを混ぜ合わせて、トランザクションをネストせずにスパゲッティ コードを作成できます)。

于 2011-09-24T08:39:14.530 に答える
0

ネストされたトランザクションと呼ばれるものはありません。

SQL が考慮する唯一のトランザクションは、最も外側のトランザクションです。コミットまたはロールバックされたものです。ネストされたトランザクションは構文的に有効です。それだけです。トランザクション内からプロシージャを呼び出し、そのプロシージャ自体にトランザクションがあるとします。この構文ではトランザクションをネストできますが、効果があるのは最も外側のトランザクションだけです。

編集: ここを参照: http://www.sqlskills.com/BLOGS/PAUL/post/A-SQL-Server-DBA-myth-a-day-(2630)-nested-transactions-are-real.aspx

于 2011-09-24T08:41:37.790 に答える