J.D*_*.D. 5 sql-server sql-server-2008-r2 jobs system-tables
我正在阅读Microsoft API 中的SysSchedules表,并尝试在查询中使用该表进行合并。
在文档中,Freq_Interval 列似乎是针对在计划中选择一天而 Freq_Type 为每周的情况定义的。但是选择多天的每天组合的值是什么?
例如,我有一项工作,计划每周在星期一、星期二、星期三、星期四和星期五发生。我在 MSDB.dbo.SysSchedules 表中看到,它的 Freq_Interval 为 62(文档中未列出)。
文档指出
freq_interval 是以下一项或多项:
1 = 星期日
2 = 星期一
4 = 星期二
8 = 星期三
16 = 星期四
32 = 星期五
64 = 星期六
这些值都是 2 的幂。
当您选择多天时,只需添加不同的代码即可。
2 + 4 + 8 + 16 + 32 = 62
Run Code Online (Sandbox Code Playgroud)
或者使用按位或运算符将它们组合起来。
2 | 4 | 8 | 16 | 32
Run Code Online (Sandbox Code Playgroud)
|
(我的建议是在代码中使用,+
如果在你的头脑中将它们相加! -|
是“正确”的使用方式,如果列表中有重复的值,则不会出现错误的行为)
如果你想进行相反的操作,你需要按位和
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1551 次 |
最近记录: |