选择期间保持锁定
Hold Lock During Selection
我们有一些遗留的旧事务表,其中包含列 Locked
和 LockDate
。一次只有一个用户可以选择一个交易(行)。每当用户选择一个特定的交易时,我们都会标记行 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"已经被锁了别人就不能锁了
我们有一些遗留的旧事务表,其中包含列 Locked
和 LockDate
。一次只有一个用户可以选择一个交易(行)。每当用户选择一个特定的交易时,我们都会标记行 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"已经被锁了别人就不能锁了