如何让每月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
相关产品推荐
相关产品推荐

