2011-10-04 45 views
3

我有一个SQL代理作业,它有多个步骤,计划在某个时间周一到周五运行。我需要能够在此作业上实现停止功能,以便不在表中列出的假日上运行。SQL作业计划在假日不运行

我真的不知道如何处理这个问题。我是否需要创建第一步,检查它是否是假期,然后如果它失败了,那么该作业会失败?

我有一个存储过程,将检查我传递的日期,看看它是否是假期,我只是不知道如果强制它报告失败,如果结果是yes这是一个假期。任何帮助将不胜感激。

+0

你想它积极失败?或者只是静静地停下来? – gbn

+0

我想只是静静地停下来。我需要它停止那一天的过程,但它会在第二天收到定期的时间表。 – Taryn

回答

5

理念:

  1. SQL Server代理运行作业
  2. 第一步是 “检查假期”
  3. 代码抛出错误
  4. 作业步骤静静地失败

3点:要从存储过程获取错误到SQL Server代理,请使用RAISERROR

... 
IF EXISTS (SELECT * FROM Holidays WHERE Date = GETDATE()) 
    RAISERROR ('Do nothing: relax: chill out', 16, 1); 
... 

点4:在这种情况下,使用“退出与成功”(1)为@on_fail_action参数sp_add_jobstep

+0

是位于msdb中的sp_add_jobstep,如果是这样,我不确定我可以使用它,因为我们的服务器几乎锁定在仅使用我们可以访问的数据库。 – Taryn

+0

@bluefeet:sp_add_jobstep也在SSMS中设置作业时运行 – gbn

+0

抱歉不理解,我是新设置作业等。我想我错过了一些东西。在我检查假期的步骤中,我执行了更新的存储过程以包含RAISERROR。我没有看到sp_add_jobstep进入这一步的位置。 – Taryn