我想使用锁定表进行悲观离线锁定,以防止多个用户处理一个工作项的情况。我正在使用一个锁表来存储活动锁,并使用两个存储过程来进行锁定和解锁。
我的锁表结构如下: CaseId (PK) | 用户名 | 锁定有效到。
对于锁定和解锁,我编写了两个存储过程,一个用于锁定,一个用于解锁。
这是我的锁定存储过程:
BEGIN
BEGIN TRY
INSERT INTO scs.dbo.caselocks VALUES (@caseId, @agentId, dateadd(n, @lockTime, getdate()) )
SELECT 0
END TRY
BEGIN CATCH
SELECT 1
END CATCH
END
这是为了移除锁:
BEGIN
BEGIN TRY
DELETE FROM scs.dbo.caselocks
WHERE caseid = @caseid
SELECT 0
END TRY
BEGIN CATCH
SELECT 1
END CATCH
END
我的问题是,这是处理锁的正确方法吗?(对不起,如果这应该被发布到 Code Review 而不是 SO。)