选择期间保持锁定

Hold Lock During Selection

我们有一些遗留的旧事务表,其中包含列 LockedLockDate。一次只有一个用户可以选择一个交易(行)。每当用户选择一个特定的交易时,我们都会标记行 Locked=1 这样其他用户就不能选择相同的交易(直到用户保存交易或我们在一段时间后清除锁)。问题是在系统负载下,多个用户可以在并发下选择同一个事务。我们正在做,

SELECT TOP 1 * FROM TABLE WHERE Locked=0 AND OurConditions
UPDATE TABLE SET Locked=1 WHERE ID=....

如何在对系统性能影响最小的情况下解决此问题。

locked 添加到您的 WHERE:

UPDATE YT
SET Locked = 1--, other columns to set
FROM dbo.YourTable YT
WHERE YT.ID = @ID
  AND Locked = 0;

那"row"已经被锁了别人就不能锁了