【问题标题】:SQL Jobs Schedule to Not Run on HolidaysSQL 作业计划在假期不运行
【发布时间】:2011-10-04 10:39:06
【问题描述】:

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

我真的不知道该怎么做。我是否需要创建第一步来检查它是否是假期,然后如果是则使作业失败?

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

【问题讨论】:

  • 您希望它主动失败吗?还是静静地停下来?
  • 我想只是安静地停下来。我需要它来停止当天的流程,但它会在第二天恢复正常的时间表。

标签: sql-server sql-agent-job


【解决方案1】:

想法:

  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点:在这种情况下,将@on_fail_action参数使用“退出成功”(1)到sp_add_jobstep

【讨论】:

  • 是位于 msdb 中的 sp_add_jobstep,如果是这样,我不确定是否可以使用它,因为我们的服务器几乎被锁定,只能使用我们可以访问的数据库。
  • @bluefeet:在 SSMS 中设置作业时也会运行 sp_add_jobstep
  • 抱歉不理解,我是新来的工作,等等。我想我错过了一些东西。在检查假期的步骤中,我执行了已更新为包含 RAISERROR 的存储过程。我看不到 sp_add_jobstep 在此步骤中的作用。
  • GUI 调用 sp_add_jobstep。在 GUI 中有一个选项可以选择失败时发生的情况等。我没有安装 SQL Server 来截屏
  • 我现在明白了,但我一定是做错了什么。我将今天的日期添加到我的假期表并运行它。该过程在检查假期后按预期停止。但是当我删除今天的日期并再次运行它时,它从未进入第二步。
最近更新 更多