私がお勧めするアプローチの種類は、レコードが処理されているかどうかを示す行に沿ってレコード内にフィールドを持つことです。次に、次の処理を行う「キューから次を読み取る」sproc を実装して、2 つのプロセスが同じレコードを取得しないようにします。
BEGIN TRANSACTION -- Find the next available record that's not already being processed. -- The combination of UPDLOCK and READPAST hints makes sure 2 processes don't -- grab the same record, and that processes don't block each other. SELECT TOP 1 @ID = ID FROM YourTable WITH (UPDLOCK, READPAST) WHERE BeingProcessed = 0 -- If we've found a record, set it's status to "being processed" IF (@ID IS NOT NULL) UPDATE YourTable SET BeingProcessed = 1 WHERE ID = @ID COMMIT TRANSACTION -- Finally return the record we've picked up IF (@ID IS NOT NULL) SELECT * FROM YourTable WHERE ID = @ID
プレ>これらのテーブル ヒントの詳細については、MSDN を参照してください。