SQL 作业能否在结束日期后自行删除?

Sud*_*amy 5 sql-server sql-server-2008-r2 jobs

我创建了一个作业,它将使用动态值自动设置其开始日期和结束日期。

例如:

作业将运行八天,在第八天,无论其状态如何,它都需要自动删除自己。

有没有办法在创建或调度时对其进行编码?

IT *_*nja 6

SQL 作业能否在结束日期后自行删除?

我创建了一个作业,它将使用动态值自动设置其开始日期和结束日期。

有没有办法在创建或调度时对其进行编码?

您可以通过使用sp_delete_job并动态创建适用的语法和受控逻辑来执行此操作,以便在需要删除日期时为动态创建的作业名称执行此操作。

由于您正在构建动态 SQL 代理作业并使用开始日期和结束日期创建它们,如果日期等于作业结束时的第 8 天,您只需放入额外的逻辑来执行sp_delete_job WHERE @job_name = '<Dynamic Job Name>'

如果日期等于第 9 天或第 8 天的后一天,您可以在作业开始时放入附加逻辑以执行sp_delete_jobWHERE @job_name = '<Dynamic Job Name>'

句法

sp_delete_job { [ @job_id = ] job_id | [ @job_name = ] 'job_name' } ,  
     [ , [ @originating_server = ] 'server' ]   
     [ , [ @delete_history = ] delete_history ]  
     [ , [ @delete_unused_schedule = ] delete_unused_schedule ]
Run Code Online (Sandbox Code Playgroud)

来源

由于您控制创建动态 SQL 代理作业的逻辑,因此您应该能够使用附加逻辑进行测试,这些逻辑将删除动态 SQL 代理作业并在日期等于特定日期(例如第 8 天或第 9 天)时执行sp_delete_job

如果日期大于或等于第 8 天或第 9 天,最好使用将执行sp_delete_job 的 逻辑,以防由于系统问题等原因无法在确切日期运行,逻辑如下:WHERE Date >= CONVERT(datetime, 'YYYY-MM-DD' )

例子

USE msdb ;  
GO  

EXEC sp_delete_job  
    @job_name = N'NightlyBackups' ;  
GO
Run Code Online (Sandbox Code Playgroud)

来源