これは、 SQL Server で行レベルのロックを強制することは可能ですか?の拡張です。. ユースケースはこちら
口座番号、残高などを含む口座テーブルがあります。このテーブルは多くのアプリケーションで使用されています。私がアカウントを変更している間に、他の誰かが別のアカウントを変更している可能性は十分にあります。したがって、予想される動作は、私が自分のアカウント (ROW) をロックし、他のユーザーが彼 (別の ROW) をロックすることです。
しかし、SQL Server 2008 R2 はこのロックをページ/テーブルにエスカレートし、2 番目のユーザーはタイムアウト例外を取得します。参照されている質問に記載されているすべての解決策を試しましたが、何も機能していません。
SQL Server に行レベルのロックのみを強制的にロックさせるにはどうすればよいですか、またはページ/テーブルのロックで機能するようにこのモデルを変更するにはどうすればよいですか?
EDIT 更新はPKを介して単一のレコードを対象としており、インデックスが作成されているため、1行のみが更新/ロックされており、プロセスには1分以上かかりません
編集 今、何か奇妙なことが起こっているようです。複数の接続を開いている DAL 用の ORM ライブラリを使用しており、サポートに質問しました。しかし、テスト目的で、クエリツールで2つのセッションを開き、次のことを行いました
Session # 1
begin tran
UPDATE myTable SET COL_1 = COL_1 WHERE COL_1 = 101;
Session # 2
SELECT COL_1 FROM myTable WHERE COL_1 = 101;
セッション # 2 のクエリがタイムアウトしました!!! の他の値のクエリは正常に機能しCOL_1
ています。同じレコードが別のセッションで編集モードになっている場合、セッションの SELECT がブロックされているように見えます。
Oracle は、他のセッションによって変更されている間、行の選択をサポートしていますが (デフォルトのパラメーター/キーワードなし)、SQL Server はサポートしていません (デフォルトのパラメーター付き/キーワードなし)。そのため、問題はライブラリにあるようです。