Het soort aanpak dat ik zou aanraden is om een veld in het record te hebben in de trant van dat aangeeft of het record wordt verwerkt of niet. Implementeer vervolgens een "lees volgende uit de wachtrij"-sproc die het volgende doet, om ervoor te zorgen dat geen twee processen hetzelfde record oppikken:
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
Zie MSDN voor meer informatie over deze tabelhints.