You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让每日7点运行的SQL Server Agent作业每月10-12日不执行?

替代手动修改SQL Server Agent作业计划的最优方案

当然有更优雅的方法来替代你手动调整计划的操作!这里有几个实用的方案,你可以根据自己的SQL Server版本和使用习惯选择:

方案一:在作业中添加前置判断步骤(推荐,适配所有版本)

这个方法不需要修改作业计划,而是在作业执行前先判断当前日期是否属于每月10-12日,如果是就自动跳过后续步骤,非常灵活:

  1. 打开SQL Server Management Studio,找到你的目标作业,右键选择属性
  2. 切换到步骤选项卡,点击新建添加一个前置步骤
  3. 步骤类型选择Transact-SQL (T-SQL),在命令框中输入以下代码:
-- 判断当前日期是否为每月10、11、12日
IF DATEPART(DAY, GETDATE()) IN (10, 11, 12)
BEGIN
    -- 输出跳过提示,返回成功状态避免作业标记为失败
    PRINT '今日为每月10-12日,作业将跳过执行';
    RETURN 0;
END
  1. 将这个新步骤拖到所有步骤的最上方,设置它的执行逻辑:
    • 成功时的操作:选择转到下一步骤(让后续步骤在非跳过日期正常执行)
    • 失败时的操作:选择退出报告成功(即使判断步骤出错,也不标记作业失败)
  2. 保存作业设置即可

之后每天晚7点作业会正常触发,但10-12日时,前置步骤会直接退出,后续业务步骤不会执行,完全不需要手动干预。

方案二:利用作业计划的原生日期筛选功能(适合SQL Server 2008及以上)

如果你更倾向于通过计划本身来控制执行日期,可以创建一个覆盖非10-12日的计划:

  1. 打开作业的计划选项卡,点击新建创建一个新计划
  2. 在频率选项卡中:
    • 频率类型选择每月
    • 选择每月的这些日期,然后输入日期列表:1,2,3,4,5,6,7,8,9,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
    • 重复间隔设置为1个月
  3. 在每日频率选项卡中,设置执行时间为晚上7点,执行一次
  4. 保存计划后,禁用原来的每日计划即可

SQL Server Agent会自动处理不存在的日期(比如30天的月份跳过31日,2月自动适配闰年),这样每月1-9日和13-31日都会在晚7点正常执行,10-12日自动跳过。

方案三:自动化修改计划(不推荐,仅作补充)

如果你坚持想沿用类似手动修改的逻辑但实现自动化,可以创建一个辅助作业来自动调整计划:

  1. 创建一个新的代理作业,添加两个T-SQL步骤:
    • 步骤1(每月9日晚8点执行):修改原计划的开始日期为13日
      UPDATE msdb.dbo.sysschedules
      SET active_start_date = CONVERT(VARCHAR(8), DATEADD(DAY, 4, GETDATE()), 112) -- 9日+4天=13日
      WHERE name = '你的原计划名称'
      
    • 步骤2(每月12日晚8点执行):修改原计划的开始日期为次月1日
      DECLARE @nextMonthFirstDay DATE = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)
      UPDATE msdb.dbo.sysschedules
      SET active_start_date = CONVERT(VARCHAR(8), @nextMonthFirstDay, 112)
      WHERE name = '你的原计划名称'
      
  2. 给这个辅助作业设置两个计划:一个每月9日晚8点执行,一个每月12日晚8点执行

不过这个方案需要维护额外的作业,且直接修改系统表有一定风险,所以优先推荐前两个方案。

内容的提问来源于stack exchange,提问作者Pintu Kawar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:55:57