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