我有一个具有以下结构的表:
ID NAME STATUS
1 Item1 Pending
2 Item2 Pending
3 Item3 Pending
........................
我使用存储过程将状态为“ Pending”的表的前N行更新为状态“ Processing”,并返回受影响的行。片段:
UPDATE TOP (@size) sample_table
SET status = "PROCESSING"
OUTPUT inserted.*
WHERE status = 'PENDING'
这按预期工作。现在,当我有多个运行上述SQL代码脚本的应用程序实例时,就会出现问题。
我需要确保没有2个以上实例在相同数据上运行以上内容。
我可以简单地锁定该表以进行操作,但是将来该表中将有成千上万个条目,因此这会影响性能。
我一直在阅读ROWLOCK,它似乎可以满足我的要求,但是我发现有一些查询优化器忽略了ROWLOCK(或提升为表锁)的帐户。
使用ROWLOCK是否适合我的用例?有解决这个问题的更好方法吗?