我建议的一种方法是在记录中沿记录的字段显示指示是否正在处理记录的字段。然后实现一个“从队列中读取下一个”存储过程,该存储过程执行以下操作,以确保没有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 = IDFROM 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 = @IDCOMMIT TRANSACTION-- Finally return the record we've picked upIF (@ID IS NOT NULL) SELECT * FROM YourTable WHERe ID = @ID
有关这些表提示的更多信息,请参见MSDN。



