web-dev-qa-db-ja.com

Freq_Typeが週次であり、スケジュールで複数の日が選択されている場合、MSDB.dbo.SysSchedulesのFreq_Interval列の値は何ですか?

Microsoft APIの SysSchedules テーブルを調べており、このテーブルを使用してクエリに組み込むことを試みています。

ドキュメントでは、Freq_Interval列は、スケジュールで1日が選択され、Freq_Typeが毎週の場合に定義されているようです。しかし、複数の日を選択した場合、他のすべての日の組み合わせの値は何ですか?

たとえば、月曜日、火曜日、水曜日、木曜日、金曜日に毎週実行されるようにスケジュールされているジョブがあります。 MSDB.dbo.SysSchedulesテーブルに表示されますが、Freq_Intervalは62です(ドキュメントには記載されていません)。

Job Schedule DetailsMSDB.dbo.SysSchedules

5
J.D.

ドキュメントには、

freq_intervalは、次の1つ以上です。

1 =日曜日
2 =月曜日
4 =火曜日
8 =水曜日
16 =木曜日
32 =金曜日
64 =土曜日

これらの値はすべて2の累乗です。

複数の日を選択する場合は、個別のコードを追加してください。

2 + 4 + 8 + 16 + 32 = 62

または、それらを組み合わせるために bitwise or 演算子を使用します。

2 | 4 | 8 | 16 | 32

(私の推奨は|コード内および+頭に入れれば! -|は「正しい」ものであり、リストに重複する値がある場合でも正しく動作しません)

逆の操作を実行しようとしている場合は、必要な bitwise and

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
4
Martin Smith