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

如何让每月7日每小时运行的SQL Agent作业成功后停止至下月7日

实现SQL Agent作业成功后禁用至下月7日的方案

思路说明

和你的想法完全契合:主作业执行成功后立即禁用自身,避免当日后续的重复运行;再配一个辅助作业,每月7日自动把主作业重新启用,保证次月正常触发。

第一步:给主作业加禁用自身的步骤

在主作业的最后一个步骤(必须是执行成功才会走到的步骤)新增一个T-SQL步骤,代码如下:

-- 把下面的作业名替换成你实际的主作业名称
DECLARE @TargetJobName NVARCHAR(128) = N'你的主作业名称'
DECLARE @JobID UNIQUEIDENTIFIER

SELECT @JobID = job_id FROM msdb.dbo.sysjobs WHERE name = @TargetJobName

-- 禁用目标作业
EXEC msdb.dbo.sp_update_job
    @job_id = @JobID,
    @enabled = 0

注意:这个步骤的"成功时的操作"要设为"退出报告成功",失败时的操作根据你的业务需求选(比如重试2次后退出报告失败)。

第二步:创建辅助启用作业

新建一个SQL Agent作业,调度设置为每月7日00:00执行,然后添加一个T-SQL步骤,代码如下:

-- 同样替换成你的主作业名称
DECLARE @TargetJobName NVARCHAR(128) = N'你的主作业名称'
DECLARE @JobID UNIQUEIDENTIFIER

SELECT @JobID = job_id FROM msdb.dbo.sysjobs WHERE name = @TargetJobName

-- 启用目标作业
EXEC msdb.dbo.sp_update_job
    @job_id = @JobID,
    @enabled = 1

关键验证点

  • 主作业的调度要设为每月7日,每小时运行一次
  • 辅助作业的执行时间要早于主作业当日的第一个触发时间(比如凌晨0点,确保主作业在7日第一次运行前已经被启用)
  • 测试时可以手动触发主作业,检查msdb.dbo.sysjobs里的enabled字段是否变成0;再手动触发辅助作业,确认enabled变回1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:25:21