Sql-Server-2012

每月在第 16 天執行 SQL 作業。如果是周末,則在下一個工作日執行(不在乎是否是節假日)

  • May 19, 2021

我需要每天執行一項工作 16。但如果是“星期六”或“星期日”,則必須在下一個工作日執行。

我不在乎是不是假期。我只需要執行它。

我可以做這樣的事情並在步驟上分開它,並且只有在它執行沒有錯誤時才傳遞到下一步:

--Step 1 - Verify if it is 16
IF  day(getdate()) <> 16
   RAISERROR ('Job runs only day 16.',16,1) 

--Step 2 - verify if its saturday of sunday
IF  DATEPART(weekday,getdate()) IN ( 7,1 )
   RAISERROR ('Job will run on the next business day.',16,1)

我將使用這些查詢創建 2 個步驟,但這不起作用,因為假設下一個工作日是 18 日,第一步將引發錯誤。

有沒有辦法安排這樣的事情?

它並不漂亮,但是您可以將所有條件包裝成CASE這樣:

DECLARE @IsGood bit;
SET @IsGood = SELECT CASE WHEN DAY(GETDATE()) = 16 AND DATEPART(WEEKDAY, GETDATE()) NOT IN (1, 7) THEN 1
                         WHEN DAY(GETDATE()) IN (17, 18) AND DATEPART(WEEKDAY, GETDATE()) = 2 THEN 1
                         ELSE 0 END;

IF @IsGood <> 1
   RAISERROR ('Nope. Not today.', 16, 1); 

將其投入到每個月 16 日、17 日和 18 日執行的計劃作業中,你會很好。

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