SQL 2005-2008 での行のロック
-
02-07-2019 - |
質問
トランザクションを開始せずに SQL 2005 ~ 2008 データベース内の行をロックして、ロックが解除されるまで他のプロセスが行を更新できないようにする方法はありますか?
解決
使用できます RowLock またはその他のヒント でもあなたはそうあるべきです 注意深い..
HOLDLOCK ヒントは、トランザクションをコミットするまでロックを保持するように SQL Server に指示します。ROWLOCK ヒントはこのレコードのみをロックし、ページまたはテーブルのロックは発行しません。
接続を閉じるかタイムアウトになった場合にも、ロックは解除されます。これを実行すると、この行にヒットする SELECT ステートメントが途中で停止してしまうため、非常に注意して実行します。SQL Server には、使用できるロック ヒントが多数あります。Books Online で HOLDLOCK または ROWLOCK を検索すると、これらの情報が表示されます。
他のヒント
サーバーで実行するすべてのことは、暗黙的または明示的にトランザクションで発生します。
トランザクションのない行を単純にロックする (行を読み取り専用にする) ことはできません。データベースを読み取り専用にすることはできますが、1 行だけにすることはできません。
目的を説明すれば、より良い解決策になるかもしれません。分離レベルとロックのヒント 行のバージョン管理.
ロックする必要がありますか? 行, 、またはすべきです SQL Server のアプリケーション ロック 必要なことをしますか?
アプリケーション ロックは、「ロック」、「ロック解除」、およびロックされているかどうかの確認ができる名前付きのロックです。詳細については上記のリンクを参照してください。(接続が閉じられた場合などにロックが解除されるため、自動的にクリーンアップされる傾向があります)