Cách tiếp cận mà tôi khuyên dùng là có một trường trong bản ghi dọc theo các dòng của trường đó cho biết liệu bản ghi có đang được xử lý hay không. Sau đó, triển khai chương trình "đọc tiếp theo từ hàng đợi" thực hiện như sau, để đảm bảo không có 2 quy trình nào nhận cùng một bản ghi:
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
Để biết thêm thông tin về các gợi ý bảng này, hãy xem MSDN