我可以同时选择和更新吗?

Ed *_*net 5 sql-server

这是对我正在做的工作的过度简化的解释.
我有一个状态列表.应用程序的多个实例将拉出第一行的内容,状态为NEW,更新状态WORKING,然后继续处理内容.
使用两个数据库调用很容易做到这一点; 先是SELECT当时的UPDATE.但我希望在一次调用中完成所有操作,以便应用程序的另一个实例不会拉同一行.有点像一SELECT_AND_UPDATE件事.

存储过程是最好的方法吗?

Lie*_*ers 8

您可以使用OUTPUT语句.

DECLARE @Table TABLE (ID INTEGER, Status VARCHAR(32))
INSERT INTO @Table VALUES (1, 'New')
INSERT INTO @Table VALUES (2, 'New')
INSERT INTO @Table VALUES (3, 'Working')

UPDATE  @Table
SET     Status = 'Working'
OUTPUT  Inserted.*
FROM    @Table t1
        INNER JOIN (
          SELECT  TOP 1 ID 
          FROM    @Table
          WHERE   Status = 'New'
        ) t2 ON t2.ID = t1.ID
Run Code Online (Sandbox Code Playgroud)


Ada*_*Dev 3

听起来像是一个队列处理场景,您希望一个进程仅获取给定的记录。

如果是这种情况,请查看我今天早些时候提供的答案,其中描述了如何使用事务结合 UPDLOCK 和 READPAST 表提示来实现此逻辑: 行锁 - 手动使用它们

最好包裹在存储过程中。

我不确定这是否是您想要做的,因此我没有投票关闭重复项。