重複の可能性:
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