MS SQL Serverで更新する行を選択し、更新またはキャンセルするまで行をロックしたい場合は、どちらのオプションの方が適していますか:-
1)UPDLOCKのようなクエリヒントを使用します。2)トランザクションにREPEATABLE READ分離レベルを使用します。3)その他のオプション。
ありがとう、チャク。
MS SQL Serverで更新する行を選択し、更新またはキャンセルするまで行をロックしたい場合は、どちらのオプションの方が適していますか:-
1)UPDLOCKのようなクエリヒントを使用します。2)トランザクションにREPEATABLE READ分離レベルを使用します。3)その他のオプション。
ありがとう、チャク。
エンドユーザーなどの別のリソースを待っている場合は、Dave Markle のアドバイスに従ってください。
それ以外の場合は、次の T-SQL コードを試してください。
BEGIN TRAN
SELECT *
FROM authors AU
WITH (HOLDLOCK, ROWLOCK)
WHERE AU.au_id = '274-80-9391'
/* Do all your stuff here while the row is locked */
COMMIT TRAN
HOLDLOCKヒントは、トランザクションをコミットするまでロックを保持するよう SQL Server に丁寧に要求します。ROWLOCKヒントは、ページまたはテーブル ロックを発行するのではなく、この行のみをロックするように SQL Server に丁寧に要求します。
多くの行が影響を受ける場合は、SQL Server が主導権を握り、ページ ロックにエスカレートするか、サーバーのメモリをいっぱいにして処理を停滞させる一連の行ロックが発生することに注意してください。
ない。ユーザーがデータを入力している間、トランザクションを開いたままにしたいと思うことはほとんどありません。このような悲観的なロックを実装する必要がある場合、人々は通常、独自の機能をロールすることによってそれを行います。
あなたがしていることの完全な影響を考慮してください。私はかつて、このようなロックを実装したシステムに取り組んだことがあります。多くの場合、大量の古いロックに遭遇します。これをユーザーに押し付けると、ユーザーはすぐに混乱して怒ります。私たちの場合の解決策は、このロック機能を完全に削除することでした。
ROWLOCK を使用しているにもかかわらず、SQL Server は必要に応じて完全なページ ロックを取得することを選択する可能性があることに注意してください。