我们有一些旧的旧事务表,其中包含列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;
然后,其他人无法锁定已经锁定的“行”。