Sql-Server-2012
每月在第 16 天執行 SQL 作業。如果是周末,則在下一個工作日執行(不在乎是否是節假日)
我需要每天執行一項工作 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 日執行的計劃作業中,你會很好。