我有一个DocumentJob表,其中包含要针对给定文档执行的作业。表中的每一行都有jobId,documentId和jobstatus。确保单个添加到SQL表中
多线程/进程将试图在任何给定的时间添加到此表(使用下面给出的代码)
begin tran
if exists
(
select 1 from DocumentJob
where DocumentId = @inDocumentId
and Status in ('Running', 'New')
)
throw 50001, 'New or Active Job for Document is already present', 1
insert into DocumentJob (DocumentId, Status) values(DocumentId, 'New')
select @JobId = scope_identity();
commit;
对于给定的文档ID - 我想补充一个新的工作只有在没有任何其他工作正在运行或新的文档。以下代码片段是否处理上述要求,或者是否存在可能违反上述条件的一些条件?
我的目标是了解当上面的过程同时被调用时,表是否被正确锁定等。
你有没有试过运行这段代码? – Tushar
是的 - 添加等工作正常。我担心的是当同时调用proc时可能发生的竞争状况。 – shekhar
我意识到我的描述不清晰并更新了它。 – shekhar