助けが必要です。まず、小さなサンプルでシナリオを説明しましょう。
列のあるStudents
テーブルがあるとします。
Id int(PK)
Name varchar(200)
Marks1 int
Marks2 int
Marks3 int
TotalMarks int
IsTotalCalculated bit
InProcess bit
このテーブルには膨大な数のレコードがあります。
次に、各学生のTotalMarksを計算して、TotalMarks
列を更新します。
C#コンソールアプリに来て、ストアドプロシージャを呼び出しています。
SP1 => InProcess=0およびIsTotalCalculated=0の上位2つのレコードを一度にフェッチし、そのInProcess = 1を設定して、処理を実行します。(SELECTとUPDATEがあります)
SP2 =>最後に、IsTotalCalculated=1およびInProcess=0を更新するこれらの2つの行を再度更新します(UPDATE)
懸念事項:私の懸念は、処理する2つの行を選択するとすぐに、他のコンソールアプリインスタンスがこれらの2つの行を処理対象として選択しないようにすることです。私は何をすべきか?
注:2つのSPのC#コードをTransactionBlockに配置しました。
ありがとう、
ジャスティン・サミュエル