UPDATE PS --WITH(ROWLOCK) optionA
SET NewColumn =
(CASE
WHEN (PS.ColumnA IS NOT NULL AND PS.ColumnA > 0) THEN PS.ColumnA
ELSE TableB.SomeColumn END
)
FROM MainTable AS PS WITH(ROWLOCK) -- optionB
INNER JOIN TableA WITH(NOLOCK) ON TableA.ID = PS.TableAID
INNER JOIN TableB WITH(NOLOCK) ON TableB.ID = TableA.TableBID
上記のステートメントは、がROWLOCK
であることを確認する正しい方法ですが、インナーは他のテーブルをNOLOCK
と結合していますか?Inner join nolock中にRowlockを使用して更新を適用する方法?
optionA
とoptionB
の両方がうまく実行されていると思われます。そのため、両方とも正しいかどうかわかりませんrowlock
?
MainTable
には更新スクリプトを実行している間に1億のレコードがあるので、MainTable
がローロックであることを確認する方法はありますか?
更新ステートメントが実行前に期待通りにロックされることを確認したいとお考えですか? –