这是对我正在做的工作的过度简化的解释.
我有一个状态列表.应用程序的多个实例将拉出第一行的内容,状态为NEW,更新状态WORKING,然后继续处理内容.
使用两个数据库调用很容易做到这一点; 先是SELECT当时的UPDATE.但我希望在一次调用中完成所有操作,以便应用程序的另一个实例不会拉同一行.有点像一SELECT_AND_UPDATE件事.
存储过程是最好的方法吗?
您可以使用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)
听起来像是一个队列处理场景,您希望一个进程仅获取给定的记录。
如果是这种情况,请查看我今天早些时候提供的答案,其中描述了如何使用事务结合 UPDLOCK 和 READPAST 表提示来实现此逻辑: 行锁 - 手动使用它们
最好包裹在存储过程中。
我不确定这是否是您想要做的,因此我没有投票关闭重复项。
| 归档时间: |
|
| 查看次数: |
7944 次 |
| 最近记录: |