0

我有一个调度程序(用 c# 创建)在多台机器上运行,访问一个数据库。桌子上有要做的工作清单。如下所示:

ID  JobDetail Flag
1   ---       1
2   ---       0
3   ---       0

Flag: 
0: open, 1: inprogress, 2: completed

我的问题是我应该怎么做才能确保没有调度程序执行相同的工作。

对不起,这个问题应该很笼统,如果有欺骗请给我一个链接。

4

1 回答 1

2

尝试这样的事情:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
GO

DECLARE @CURR_JOBID int;

SELECT @CURR_JOBID=top 1 ID FROM JOB_TABLE WHERE Flag=0 and <other condtions>

BEGIN TRANSACTION

UPDATE JOB_TABLE set Flag=1 where ID=@CURR_JOBID 

COMMIT

SET TRANSACTION ISOLATION LEVEL READ COMMITED;
GO

现在使用@CURR_JOBID 进行进一步处理

作业完成后,将 Flag 更新为 2

于 2012-09-10T09:02:45.003 回答