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