2011-10-04 42 views
3

我有一個SQL代理作業,它有多個步驟,計劃在某個時間週一到週五運行。我需要能夠在此作業上實現停止功能,以便不在表中列出的假日上運行。SQL作業計劃在假日不運行

我真的不知道如何處理這個問題。我是否需要創建第一步,檢查它是否是假期,然後如果它失敗了,那麼該作業會失敗?

我有一個存儲過程,將檢查我傳遞的日期,看看它是否是假期,我只是不知道如果強制它報告失敗,如果結果是yes這是一個假期。任何幫助將不勝感激。

+0

你想它積極失敗?或者只是靜靜地停下來? – gbn

+0

我想只是靜靜地停下來。我需要它停止那一天的過程,但它會在第二天收到定期的時間表。 – Taryn

回答

5

理念:

  1. SQL Server代理運行作業
  2. 第一步是 「檢查假期」
  3. 代碼拋出錯誤
  4. 作業步驟靜靜地失敗

3點:要從存儲過程獲取錯誤到SQL Server代理,請使用RAISERROR

... 
IF EXISTS (SELECT * FROM Holidays WHERE Date = GETDATE()) 
    RAISERROR ('Do nothing: relax: chill out', 16, 1); 
... 

點4:在這種情況下,使用「退出與成功」(1)爲@on_fail_action參數sp_add_jobstep

+0

是位於msdb中的sp_add_jobstep,如果是這樣,我不確定我可以使用它,因爲我們的服務器幾乎鎖定在僅使用我們可以訪問的數據庫。 – Taryn

+0

@bluefeet:sp_add_jobstep也在SSMS中設置作業時運行 – gbn

+0

抱歉不理解,我是新設置作業等。我想我錯過了一些東西。在我檢查假期的步驟中,我執行了更新的存儲過程以包含RAISERROR。我沒有看到sp_add_jobstep進入這一步的位置。 – Taryn