これについてここで質問を見ましたが、それは古いので、解決策が存在する場合はもう一度質問します.
私の問題はこれです。選択したいデータベース テーブルがありますが、選択した行をロックしたいと考えています。この理由は、同じ行を選択したい別のプロセスを実行している可能性があり、これを防ぎたいからです。
同じことをしている 2 つのプロセスがあるとします。選択を実行し、データの処理を開始します。その後、数秒後に次のプロセスが来て選択を行いますが、行がロックされていないため、同じレコードを取得して処理を開始します。もちろん、これは悪い状況です。Oracleでは、SELECT FOR UPDATEを使用できます。これにより、行のロックが解除され、2番目のプロセスで行が使用されるのを防ぐことができます。これは SQL Server 2008 でどのように実現できますか?
標準の sql ステートメントしか使用できないことを付け加えておきます。プロシージャ、関数などにアクセスできません。簡単なステートメントで実行する必要があります。それは長い話であり、私の手を離れてしまった設計上の考慮事項です。ソリューションは、テーブルに格納し、後で取得して、特にコマンド オブジェクトに割り当てられた C# の ADO オブジェクトを介して実行できる必要があります。
このステートメントにロックを適用するにはどうすればよいですか?
SELECT *
FROM
(SELECT TOP (20) *
FROM [TMA_NOT_TO_ENTITY_QUEUE]
WHERE [TMA_NOT_TO_ENTITY_QUEUE].[STATE_ID] = 2
ORDER BY TMA_NOT_TO_ENTITY_QUEUE.ID) a