SQL Server从不断更新的表中提取记录

时间:2018-08-18 09:08:34

标签: sql-server sql-server-2012

我在SQL Server 2012中有一个表,该表正在由服务不断使用,该服务正在不断更新表中的记录。服务有点像一个队列,服务在其中处理记录,然后定期运行另一个存储过程,以将处理后的记录拉出到另一个表中。该表中的记录以一种状态开始,在处理过程中,它们进入另一种状态。

当我尝试运行存储过程以拉出已完成的记录时,如果正在运行的进程更新表时碰巧发生了这种情况,则我遇到了一个死锁问题,该问题大约每2分钟发生一次。我本来只是想使用NOLOCK提示来消除这种情况,但是在阅读了一下SO thread之后,我想我应该尽可能避免使用NOLOCK

目标:

允许该服务继续照常运行,但是还允许另一个存储过程定期进入并删除已完成的记录。如果给定的行有锁,那么我想只保留该行,并在下次运行存储过程时选择它。在处理期间,不要求我获取存储过程的所有行。这仅在处理完所有记录之后才有意义,这时我需要确保获得所有记录,同时使服务仍在其他不相关的记录上运行,并且不会引起任何死锁问题。希望这是有道理的。

This article似乎建议REPEATABLE READ

我在正确的道路上还是有更好的方法?

0 个答案:

没有答案