Microsoft APIの SysSchedules テーブルを調べており、このテーブルを使用してクエリに組み込むことを試みています。
ドキュメントでは、Freq_Interval列は、スケジュールで1日が選択され、Freq_Typeが毎週の場合に定義されているようです。しかし、複数の日を選択した場合、他のすべての日の組み合わせの値は何ですか?
たとえば、月曜日、火曜日、水曜日、木曜日、金曜日に毎週実行されるようにスケジュールされているジョブがあります。 MSDB.dbo.SysSchedulesテーブルに表示されますが、Freq_Intervalは62です(ドキュメントには記載されていません)。
ドキュメントには、
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