मैं जिस तरह के दृष्टिकोण की सिफारिश करूंगा, वह यह है कि रिकॉर्ड में एक फ़ील्ड होना चाहिए जो इंगित करता है कि रिकॉर्ड संसाधित किया जा रहा है या नहीं। फिर "कतार से आगे पढ़ें" स्पोक लागू करें जो निम्न कार्य करता है, यह सुनिश्चित करने के लिए कि कोई भी 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