Sql-Server

SQL 代理作業 - 更改所有作業步驟以在作業失敗時轉到特定步驟

  • February 10, 2022

我有一個需要更改的 SQL 代理作業,以便任何時候任何步驟失敗時,“ON FAILURE”操作都會轉到特定步驟。

有沒有人有腳本,或者你能告訴我如何寫這個,以便我可以對工作中的所有步驟進行批量更新,以便在失敗時轉到特定步驟?

我有一份超過 800 步的工作。這是一個瘋狂的供應商工作,但它需要一個步驟,以便在工作失敗時我可以執行一個 sendmail 腳本。

我會使用這樣的東西(斯蒂芬莫里斯的回答的具體例子,雖然我不使用游標)。這將生成在 CMD 輸出中用於第二個查詢的命令。

但是,您不能使用作業本身的“通知”選項卡嗎?那會更容易。

https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-update-jobstep-transact-sql?view=sql-server-ver15

/** 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 的步驟。

https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-update-jobstep-transact-sql?view=sql-server-ver15

引用自:https://dba.stackexchange.com/questions/307119