トランザクション内でストアドプロシージャ(sp_update_queue
)に更新T-SQLをラップする必要がある状況があります。しかし、同じ接続を使用していて、異なるクエリを実行しているスレッドと、開始したトランザクションをロールバックするスレッドが2つある場合、どうなるかと思います。T-SQLストアドプロシージャトランザクション同時実行性
は、例えば、スレッドAがテーブルQUEUED_TASKS
を更新するsp_update_queue
と呼ばれるが、sp_update_queue
コミット/ロールバックする前に、トランザクションThreadBは、いくつかの他の更新を実行または別のテーブルの上にSQLを挿入し、CUSTOMERS
を言います。その後、スレッドBが終了すると、sp_update_queue
にエラーが発生し、ロールバックが呼び出されます。
ThreadBがトランザクション内で変更を加えたかどうかにかかわらず、両方とも同じ接続を使用しているため、ロールバックはThreadB?によって行われた変更をロールバックします。
サイドノート:あなたは** **あなたのストアドプロシージャのための 'sp_'接頭辞を使用しないでください。マイクロソフトは、[*ストアドプロシージャの名前付け*を参照してください](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx)、およびあなたはいつか名前衝突のリスクを将来実行します。 [ストアドプロシージャのパフォーマンスにも悪い](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)単に 'sp_'を避け、他の何かを接頭辞として使うのが最善です。 –
それぞれの「スレッド」から 'select @@ spid'を呼び出します。 –
「どちらも同じ接続を使用しています...」と言ったときの意味を明確にすることはできますか? –