0

重複の可能性:
SQL Server 2008:更新のために選択

私はこれについてここで質問を見ましたが、それは古いので、解決策が現在存在する場合に備えてもう一度質問します。

私の問題はこれです。選択したいデータベーステーブルがありますが、選択した行をロックしたいと思います。これは、同じ行を選択する別のプロセスを実行している可能性があり、これを防止したいためです。

同じことを行う2つのプロセスがあると想像してください。選択を実行し、データの処理を開始します。次に、数秒後に次のプロセスが実行されて選択が実行されますが、行がロックされていないため、同じレコードを取得して処理を開始します。もちろん、これは悪い状況です。Oracleでは、SELECT FOR UPDATEを使用して、行のロックを解除し、2番目のプロセスで行が使用されないようにすることができます。これはSQLServer2008でどのように実現できますか?

編集:

標準の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
4

0 に答える 0