SQLServer2000 T-SQLについてストアドAではトランザクションをTranAという名前で宣言し処理によってCOMMIT、ROLLBACKをおこないます。ストアドBではトランザクションをTranBという名前で宣言し処理によってCOMMIT、ROLLBACKをおこないます。TranAとTranBはネストしているとします。ストアドAからストアドBを呼び出した場合、ストアドBでCOMMITしたトランザクションTranBはストアドAのトランザクションTranAがCOMMITされない限りCOMMITされないのでしょうか?また、ストアドAでTranAをROLLBACKした場合、ストアドBのTranBがCOMMITされていた場合、どのような挙動を示すのでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/01/29 18:49:37
  • 終了:--

回答(2件)

id:mi-si No.1

mi-si回答回数207ベストアンサー獲得回数02004/01/29 19:03:20

ポイント10pt

http://www.microsoft.com/japan/msdn/sqlserver/columns/webtech/we...

ご指定のページが見つかりません

この辺を参考にしてみてください。

id:n4d No.2

n4d回答回数52ベストアンサー獲得回数22004/01/29 19:56:42

ポイント50pt

http://www.sybase.co.jp/product/manuals/index.html

サイベース株式会社 - SYBASE K.K.

 ネストされたトランザクションの場合、begin tran はネストレベルを加算します。

commit tranはネストレベルを減算し、0になった時点でコミット処理を行います。

ですので、ご質問の例では、ストアドAをコミットしないと、ストアドBでの変更もコミットされないはずです。

ロールバックの場合は、直ちにネストレベルを0にしてロールバック動作を行います。

ちなみに、セーブポイント( save tran <SavePoint_Name> )を設定して、rollback <SavePoint_Name> 構文を使用すれば、セーブポイントまでの更新を保ったまま、セーブポイント以降の更新をロールバックできます。

id:salvatore

なるほど。

ありがとうございます!

2004/01/29 20:03:33

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません