Sql-Server
SQL 代理作業 - 更改所有作業步驟以在作業失敗時轉到特定步驟
我有一個需要更改的 SQL 代理作業,以便任何時候任何步驟失敗時,“ON FAILURE”操作都會轉到特定步驟。
有沒有人有腳本,或者你能告訴我如何寫這個,以便我可以對工作中的所有步驟進行批量更新,以便在失敗時轉到特定步驟?
我有一份超過 800 步的工作。這是一個瘋狂的供應商工作,但它需要一個步驟,以便在工作失敗時我可以執行一個 sendmail 腳本。
我會使用這樣的東西(斯蒂芬莫里斯的回答的具體例子,雖然我不使用游標)。這將生成在 CMD 輸出中用於第二個查詢的命令。
但是,您不能使用作業本身的“通知”選項卡嗎?那會更容易。
/** Find your JobID here **/ SELECT J.job_id, J.[name] FROM msdb.dbo.sysjobs AS J DECLARE @JobID UNIQUEIDENTIFIER SET @JobID = 'F6F5DBF7-18FD-49D5-B018-81A55010C59D' /** GET LIST OF ALL STEPS HERE **/ SELECT S.step_id , S.step_uid , S.step_name , S.on_fail_action , S.on_fail_step_id , CMD = 'EXEC msdb.dbo.sp_update_jobstep @job_id = ' + QUOTENAME(@JobID, '''') + ', @step_id = ' + CONVERT(NVARCHAR(20), S.step_id) + ', @on_fail_action = 4, @on_fail_step_id = <STEP HERE>;' FROM msdb.dbo.sysjobsteps AS S WHERE S.job_id = @JobID --AND <Additional filtering?> ORDER BY S.step_id
您可以使用 sp_help_jobstep 檢索所有作業步驟。我建議您呼叫 sp 並將結果儲存在表中。然後循環(游標)遍歷所有步驟並呼叫 sp_update_jobstep,將參數 @on_fail_action 設置為 4,將 @on_fail_step_id 設置為包含 sendmail 的步驟。