SQL代理作业未运行所有步骤

时间:2015-05-26 13:08:44

标签: sql-server reporting-services sql-agent-job

我有一个SQL代理作业,如果在给定日期的另一个表中存在HOLIDAYCD,则应该禁止作业运行。它正在运行,它正在执行第一个exec,但其余的没有运行。这是代码:

IF EXISTS (SELECT HOLIDAYCD FROM CORE.dbo.BANKORGYEARMONTHDAY WHERE CAST(EFFDATE AS DATE) = CAST(GETDATE() AS DATE))
BEGIN
    --On a holiday disable the following jobs
    exec msdb..sp_update_job @job_name = 'CORE imports', @enabled = 0
    exec msdb..sp_update_job @job_name = '086BAE49-50CE-4B87-A8C2-A9386ABEE9D9', @enabled = 0
    exec msdb..sp_update_job @job_name = '82499D43-2884-4E16-A514-7B666F5AF095', @enabled = 0
    exec msdb..sp_update_job @job_name = '2581BD28-FA33-48C6-B9E1-7B91C432A2B0', @enabled = 0
END
ELSE
    --On a normal business day, ensure they are enabled
    exec msdb..sp_update_job @job_name = 'CORE imports', @enabled = 1
    exec msdb..sp_update_job @job_name = '086BAE49-50CE-4B87-A8C2-A9386ABEE9D9', @enabled = 1
    exec msdb..sp_update_job @job_name = '82499D43-2884-4E16-A514-7B666F5AF095', @enabled = 1
    exec msdb..sp_update_job @job_name = '2581BD28-FA33-48C6-B9E1-7B91C432A2B0', @enabled = 1

所发生的事情是' CORE进口'作业正在禁用,但没有SSRS作业。有没有更好的方法来阻止报告在假期运行?我只有SQL Server Standard 2014,所以不能选择数据驱动的报告。

2 个答案:

答案 0 :(得分:2)

您需要使用ELSE块包装BEGIN...END语句。

ELSE
BEGIN
    --On a normal business day, ensure they are enabled
    exec msdb..sp_update_job @job_name = 'CORE imports', @enabled = 1
    exec msdb..sp_update_job @job_name = '086BAE49-50CE-4B87-A8C2-A9386ABEE9D9', @enabled = 1
    exec msdb..sp_update_job @job_name = '82499D43-2884-4E16-A514-7B666F5AF095', @enabled = 1
    exec msdb..sp_update_job @job_name = '2581BD28-FA33-48C6-B9E1-7B91C432A2B0', @enabled = 1
END

没有它,只有第一个语句将由ELSE控制;任何后续语句都不会成为IF...ELSE流程的一部分,并且将始终执行,即在您的情况下始终设置为启用。

答案 1 :(得分:0)

我通常所做的是添加一个运行/不运行步骤作为每项工作的第一步,然后有类似的内容:

IF EXISTS (SELECT HOLIDAYCD FROM CORE.dbo.BANKORGYEARMONTHDAY
           WHERE CAST(EFFDATE AS DATE) = CAST(GETDATE() AS DATE))
BEGIN
    EXEC('SELECT * FROM NonExistentTable')
END

然后" On Failure"此步骤的选项是"退出作业报告成功"。

虽然这确实导致了跨作业的重复,但它也让您有机会为每个作业是否应该实际执行引入不同的条件。