Sql-Server

當 Freq_Type 是每週並且在計劃中選擇了一天以上時,MSDB.dbo.SysSchedules 中的 Freq_Interval 列的值是多少?

  • March 5, 2019

我正在閱讀 Microsoft API 中的SysSchedules表,並試圖在查詢中使用該表。

在文件中,Freq_Interval 列似乎是針對在時間表中選擇一天並且 Freq_Type 是每週時定義的。但是,當選擇超過一天時,每隔幾天組合的值是多少?

例如,我有一份工作計劃在每週一、週二、週三、週四和周五進行。我在 MSDB.dbo.SysSchedules 表中看到,它的 Freq_Interval 為 62(文件中未列出。)

作業計劃詳細資訊 MSDB.dbo.SysSchedules

該文件指出

freq_interval 是以下一項或多項

1 = 星期日

2 = 星期一

4 = 星期二

8 = 星期三

16 = 星期四

32 = 星期五

64 = 星期六

這些值都是 2 的冪。

當您選擇多天時,只需添加不同的程式碼。

2 + 4 + 8 + 16 + 32 = 62

或者使用按位或運算符來組合它們。

2 | 4 | 8 | 16 | 32

(我的建議是|在程式碼中使用,+如果將它們添加到您的腦海中!-|是“正確”的使用方法,如果列表中有重複值,則不會出現錯誤行為)

如果您嘗試執行反向操作,則需要按位和

DECLARE @Sunday TINYINT = 1,
       @Monday TINYINT = 2,
       @Tuesday TINYINT = 4,
       @Wednesday TINYINT = 8,
       @Thursday TINYINT = 16,
       @Friday TINYINT = 32,
       @Saturday TINYINT = 64;

DECLARE @TestValue TINYINT = 62;

SELECT CASE WHEN @TestValue & @Sunday = @Sunday THEN 'Y' ELSE 'N' END AS Sunday,
      CASE WHEN @TestValue & @Monday = @Monday THEN 'Y' ELSE 'N' END AS Monday,
      CASE WHEN @TestValue & @Tuesday = @Tuesday THEN 'Y' ELSE 'N' END AS Tuesday,
      CASE WHEN @TestValue & @Wednesday = @Wednesday THEN 'Y' ELSE 'N' END AS Wednesday,
      CASE WHEN @TestValue & @Thursday = @Thursday THEN 'Y' ELSE 'N' END AS Thursday,
      CASE WHEN @TestValue & @Friday = @Friday THEN 'Y' ELSE 'N' END AS Friday,
      CASE WHEN @TestValue & @Saturday = @Saturday THEN 'Y' ELSE 'N' END AS Saturday

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