SQL Server:在带有OUTPUT的UPDATE上使用ROWLOCK

时间:2018-07-18 20:34:08

标签: sql-server rowlocking

我有一个具有以下结构的表:

  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是否适合我的用例?有解决这个问题的更好方法吗?

0 个答案:

没有答案