【发布时间】:2026-01-11 08:30:02
【问题描述】:
我在多用户系统中有并发,存储过程如下图:
CREATE PROCEDURE dbo.GetWorkitemID
AS
DECLARE @workitem int;
UPDATE workqueue
SET status = 'InProcess', @workitem = workitemid
WHERE workitemid = (SELECT TOP 1 workitemid
FROM workqueue WITH (ROWLOCK,UPDLOCK,READPAST)
WHERE status = 'New' ORDER BY workitemid)
SELECT @workitem
GO
它将单个记录状态从“New”更新为“InProcess”并返回记录的 ID。
问题如下:我应该在事务范围内使用这个存储过程来启用ROWLOCK、UPDLOCK等吗?是必需的吗?第二个:它真的是线程安全的并保证唯一性吗?
【问题讨论】:
标签: sql-server tsql sql-server-2008 stored-procedures