web-dev-qa-db-ja.com

SQLジョブは終了日後に自分自身を削除できますか?

開始日と終了日を動的な値で自動的に設定するジョブを作成しました。

例えば:

ジョブは8日間実行され、8日目にはステータスに関係なく自動的に削除される必要があります。

作成中またはスケジュール中にコーディングする方法はありますか?

5

SQLジョブは終了日後に自分自身を削除できますか?

開始日と終了日を動的な値で自動的に設定するジョブを作成しました。

作成中またはスケジュール中にコーディングする方法はありますか?

これを行うには、 sp_delete_job を使用し、適切な構文と制御ロジックを動的に作成して、日付ごとに削除する必要があるときに動的に作成されたジョブ名に対してこれを実行します。

動的SQLエージェントジョブを作成し、開始日と終了日でそれらを作成しているので、実行する追加ロジックを追加するだけです sp_delete_job 日付が等しい場合8日目ジョブ終了時WHERE @job_name = '<Dynamic Job Name>'

追加のロジックをジョブの開始時にに入れて実行する sp_delete_job 日付が9日または9日と等しい場合8日目WHERE @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 ]

ソース

動的SQLエージェントジョブを作成するロジックを制御するので、動的SQLエージェントジョブを削除して実行する追加のロジックでテストできます sp_delete_job日付がに等しい場合特定の日付(たとえば、8日目または9日目)。

sp_delete_job日付が以上の場合日8または9の場合に実行するロジックを使用するのが最善の場合がありますシステムの問題などにより、正確な日付で実行されません:WHERE Date >= CONVERT(datetime, 'YYYY-MM-DD' )などのロジック

USE msdb ;  
GO  

EXEC sp_delete_job  
    @job_name = N'NightlyBackups' ;  
GO

ソース

6
Pimp Juice IT

実際には簡単な方法があります。最初にジョブステップを追加し、次のコードをステップに配置できます

declare @job_id uniqueidentifier;
set @job_id=CONVERT(uniqueidentifier, $(ESCAPE_NONE(JOBID))); 

if getdate() > '2016-07-15 17:00:00' -- change to your preferred end time
begin
    EXEC msdb.dbo.sp_update_job @job_id=@job_id, @delete_level=2; -- set auto deletion

    raiserror ('self deletion', 16, 1); -- cause the step failure
end

ジョブステップは、[On Failure Action] = "Quit the job reporting failure"として構成されます。 SQL Server 2012と2014の両方でテストしました。期待どおりに機能します。つまり、ジョブは自動的に削除されます。

4
jyao