SQL Server 2012作业调度

时间:2016-12-08 21:45:42

标签: sql tsql sql-server-2012 ssms sql-server-agent

我的情况是我有1个包(包A)需要大约3分钟才能完成,而另一个包(包B)需要大约4分钟才能完成。我需要包装A每隔5分钟通过一个工作运行,包装B每15分钟运行一次。但是,包B只能在包A完成后运行。

实施例

5-套餐A运行

10-套餐A运行

15-包装A运行,然后包装B

20-套餐A运行

25-套餐A运行

30-包装A运行,然后包装B

有没有办法安排工作以满足上述要求?

非常感谢您的帮助。提前谢谢!

1 个答案:

答案 0 :(得分:0)

对于包B,我只会输入逻辑来检查包A是否已经停止运行

等待脚本将是

WHILE EXISTS (
SELECT
    *
FROM 
    msdb.dbo.sysjobs_view job
JOIN
    msdb.dbo.sysjobactivity activity
ON 
    job.job_id = activity.job_id
JOIN
    msdb.dbo.syssessions sess
ON
    sess.session_id = activity.session_id
JOIN
(
    SELECT
        MAX( agent_start_date ) AS max_agent_start_date
    FROM
        msdb.dbo.syssessions
) sess_max
ON
    sess.agent_start_date = sess_max.max_agent_start_date
WHERE 
    run_requested_date IS NOT NULL AND stop_execution_date IS NULL
    AND job.name = 'package A') 
BEGIN 
WAITFOR DELAY '00:00:30'; 
END 

如果包A已停止运行,这将每30秒检查一次。

或者,您可以创建一个表来跟踪作业状态,并对其进行写入以跟踪状态。