Sql-Server-2016

停止多步驟代理工作而不訴諸“退出工作報告成功”?

  • November 16, 2020

我有一個多步驟的過程,有時應該在中間停止,不是因為任何失敗,而是因為不是失敗的商業原因。

如何告訴代理成功退出整個作業?(使用“退出工作報告成功”會為工作拋出一個可怕的黃色三角形,為步驟拋出一個紅色圓圈,即使沒有錯誤。)

由於有很多步驟,其中任何一個都可能合法地失敗,我寧願不要把所有東西都集中在一個巨大的步驟中。

一種解決方案是根據業務條件的成功/失敗條件使用多個作業步驟和分支 - 但這意味著該作業將為該步驟生成“可怕的”黃色三角形和紅色圓圈。

第二種解決方案是使用 3 個作業並根據業務狀況的結果呼叫兩個作業之一。

第 1 步:做某事

第 x 步:測試業務狀況

   IF dbo.fnBusinessCondition = 1 
      EXECUTE msdb.dbo.sp_start_job 'Job2'
   else
      EXECUTE msdb.dbo.sp_start_job 'Job3'

您可能需要考慮使用 SSIS 包來合併您的條件執行邏輯。

假設您有一個兩步 SSA 作業,都執行 T-SQL 語句,您可以創建一個包含三個執行 SQL 任務的 SSIS 包。

  1. 任務 1 將為您的第一個業務流程執行 SQL。
  2. 任務 2 將執行檢查,例如檢查控製表的結果,這將確定任務 3 是否會執行。任務 1 使用成功約束類型優先約束連接到任務 2。任務 2 將結果分配給 SSIS 變數。
  3. 任務 3 將為您的第二個業務流程執行 SQL。它將使用成功約束和表達式優先約束連接到任務 2。該表達式將是對來自任務 2 的變數的評估。如果結果對任務 3 的執行有效,則繼續執行,否則將停止。

然後,您可以部署 SSIS 包並將其安排在 SSA 作業中作為作業步驟執行,就像原始 T-SQL 步驟一樣。

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