Sql-Server-2008-R2

SQL 作業在每月最後一個工作日提前執行

  • April 14, 2015

現在,我有一個 SQL 作業(在 SQL Server 2008 R2 中),每個工作日晚上(不包括週末)將一個複雜的 select 語句轉儲到一個表中,並且效果很好。

由於我們公司的月結程序,他們在執行月結時需要此表中的數據。現在我手動關閉作業,禁用它,以便同一天不會轉儲兩次相同的數據,然後在下一個工作日再次啟用該作業。

有沒有辦法安排這個?或者編寫一個作業並讓它描述它是否是本月的最後一個工作日並根據這個參數描述什麼時間觸發?

如果這是不可能的,那麼我想就這樣吧……到目前為止,我還沒有找到任何可能幫助我找到這樣一個解決方案的東西。任何幫助表示讚賞!

**編輯:**這是我將用於當月最後一個工作日比較的視圖範例結果集(如您所見,我只選擇了工作日):

   CalendarDate:           WorkDay:
   2015-03-02 00:00:00.000        1
   2015-03-03 00:00:00.000        1
   2015-03-04 00:00:00.000        1
   2015-03-05 00:00:00.000        1
   2015-03-06 00:00:00.000        1
   2015-03-09 00:00:00.000        1
   2015-03-10 00:00:00.000        1
   2015-03-11 00:00:00.000        1
   2015-03-12 00:00:00.000        1
   2015-03-13 00:00:00.000        1
   2015-03-16 00:00:00.000        1
   2015-03-17 00:00:00.000        1
   2015-03-18 00:00:00.000        1

您可以更簡潔地編寫它(例如,根本沒有任何變數),但我認為從邏輯上分解它可能會更有幫助。

DECLARE @Today DATE = SYSDATETIME();

DECLARE @FirstDayNextMonth DATE = DATEADD(MONTH, 1,
DATEADD(DAY, 1-DAY(@Today), @Today));

DECLARE @LastWorkDayThisMonth DATE;

SELECT @LastWorkDayThisMonth = MAX(CalendarDate)
 FROM dbo.CalendarView -- guessing on name here
 WHERE WorkDay = 1
 AND CalendarDate >= @Today
 AND CalendarDate < @FirstDayNextMonth;

IF @LastWorkDayThisMonth = @Today
BEGIN
 -- do your last work day of the month stuff
END

(另外,我建議將您的日曆視圖更改為公開DATE而不是DATETIME。)

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