複数のユーザーが1つの作業項目で作業する場合を防ぐために、悲観的なオフラインロックにロックテーブルを使用したいと思います。アクティブなロックを格納するためのロックテーブルと、ロックとロック解除のための2つのストアドプロシージャを使用しています。
私のロックテーブルの構造は次のとおりです。CaseId(PK)| UserId | LockValidTo。
ロックとロック解除のために、2つのストアドプロシージャを作成しました。1つはロック用、もう1つはロック解除用です。
これは、ロックするためのストアドプロシージャです。
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
私の質問は、これはロックを処理するための正しいアプローチですか?(これがSOではなくCode Reviewに投稿されるべきだった場合は申し訳ありません。)