获取指定时间区间作业运行情况

背景:数据库服务器定期重启,想知道重启期间对作业的影响。通俗点就是服务器在重启这段时间,有哪些作业计划要运行,重启后是否要手动执行这些作业?
第一次重启的时候,按照最笨的方式,把所有作业看一遍,然后人为判断有哪些作业将受到影响,再根据作业具体代码,确定是否需手动执行。后来老大说要弄个过程出来,通过传入起止时间参数,返回区间内的作业计划。
PS:参考各类资料,修改过很多遍,最后成型在6月初,很多细节上的修改自己也记不清楚了,一直懒得整理。先放上代码,以及效果图。

  1 /************************************************************
  2  * 说明:输入将来的起、止时间,得到时间区间内作业计划情况。主要包括:
  3          区间内首次执行时间、区间内末次执行时间、区间内执行次数、循环间隔、每天执行频率等。
  4  * 使用:DBA_Pro_GetJobSchedules ‘20140612 07:00:00.000‘,‘20140612 08:00:00.000‘
  5  * 补充:手动运行作业,不会影响作业的计划调度。
  6  ************************************************************/
  7 CREATE PROC DBA_Pro_GetJobSchedules
  8 @Starttime DATETIME,
  9 @Endtime DATETIME
 10 AS
 11
 12 DECLARE @Midtime DATETIME
 13 IF (@Starttime < GETDATE() OR @Starttime >= @Endtime)
 14 BEGIN
 15     PRINT(‘请输入将来的起、止时间,且开始时间小于结束时间!‘)
 16     RETURN
 17 END
 18
 19 CREATE TABLE #RunningJobs
 20 (
 21     name                        VARCHAR(128)--作业名称
 22    ,schedule_id                 INT--调度id
 23    ,next_scheduled_run_date     DATETIME--下次运行时间 yyyy-mm-dd hh:mi:ss:mmm
 24    ,active_start_time           DATETIME--执行间隔:开始时间 yyyy-mm-dd hh:mi:ss:mmm
 25    ,active_end_time             DATETIME--执行间隔:结束时间 yyyy-mm-dd hh:mi:ss:mmm
 26    ,starttime                   DATETIME--运行区间开始时间,比较传入的@Starttime和active_start_time,取大者
 27    ,endtime                     DATETIME--运行区间结束时间,比较传入的@Endtime和active_end_time,取小者
 28    ,daystatus                   INT--日期状态,用于标记当天是否满足作业运行日期,为0时当天将运行
 29    ,timestaus                   INT--时间状态,用于标记当天只执行一次的作业是否已运行,为0时当天将运行
 30 )
 31
 32 WHILE (@Starttime < @Endtime)
 33 BEGIN
 34     SELECT @Midtime = CASE
 35                            WHEN DATEADD(DAY ,1 ,@Starttime) > @Endtime THEN @Endtime
 36                            ELSE CONVERT(VARCHAR ,DATEADD(DAY ,1 ,@starttime) ,112)
 37                       END
 38
 39     INSERT INTO #RunningJobs
 40     SELECT sj.name
 41           ,scd.schedule_id
 42           ,c.next_scheduled_run_date
 43           ,CONVERT(
 44                DATETIME
 45               ,CONVERT(VARCHAR(10) ,@Starttime ,120) + ‘ ‘ +
 46                STUFF(
 47                    STUFF(RIGHT(‘000000‘ + CAST([active_start_time] AS VARCHAR(6)) ,6),3,0,‘:‘)
 48                   ,6,0,‘:‘
 49                )
 50            ) [active_start_time]
 51           ,CONVERT(
 52                DATETIME
 53               ,CONVERT(VARCHAR(10) ,@Starttime ,120) + ‘ ‘ +
 54                STUFF(
 55                    STUFF(RIGHT(‘000000‘ + CAST([active_end_time] AS VARCHAR(6)) ,6),3,0,‘:‘)
 56                   ,6,0,‘:‘
 57                )
 58            ) [active_end_time]
 59           ,CASE
 60                 WHEN @Starttime <
 61                      CONVERT(
 62                          DATETIME
 63                         ,CONVERT(VARCHAR(10) ,@Starttime ,120) + ‘ ‘ +
 64                          STUFF(
 65                              STUFF(RIGHT(‘000000‘ + CAST([active_start_time] AS VARCHAR(6)) ,6),3,0,‘:‘)
 66                             ,6,0,‘:‘
 67                          )
 68                      ) THEN CONVERT(
 69                          DATETIME
 70                         ,CONVERT(VARCHAR(10) ,@Starttime ,120) + ‘ ‘ +
 71                          STUFF(
 72                              STUFF(RIGHT(‘000000‘ + CAST([active_start_time] AS VARCHAR(6)) ,6),3,0,‘:‘)
 73                             ,6,0,‘:‘
 74                          )
 75                      )
 76                 ELSE @Starttime
 77            END     starttime
 78           ,CASE
 79                 WHEN @Midtime >
 80                      CONVERT(
 81                          DATETIME
 82                         ,CONVERT(VARCHAR(10) ,@Starttime ,120) + ‘ ‘ +
 83                          STUFF(
 84                              STUFF(RIGHT(‘000000‘ + CAST([active_end_time] AS VARCHAR(6)) ,6),3,0,‘:‘)
 85                             ,6,0,‘:‘
 86                          )
 87                      ) THEN CONVERT(
 88                          DATETIME
 89                         ,CONVERT(VARCHAR(10) ,@Starttime ,120) + ‘ ‘ +
 90                          STUFF(
 91                              STUFF(RIGHT(‘000000‘ + CAST([active_end_time] AS VARCHAR(6)) ,6),3,0,‘:‘)
 92                             ,6,0,‘:‘
 93                          )
 94                      )
 95                 ELSE @Midtime
 96            END     endtime
 97           ,CASE freq_type
 98                 WHEN 1 --OneTime
 99                       THEN DATEDIFF(day ,next_scheduled_run_date ,@Starttime)
100                 WHEN 4 --Daily
101                       THEN DATEDIFF(dd ,next_scheduled_run_date ,@Starttime)%freq_interval
102                 WHEN 8 --Weekly
103                       THEN DATEDIFF(week ,next_scheduled_run_date ,@Starttime)%freq_recurrence_factor
104                      +
105                      CASE
106                           WHEN freq_interval & 1 = POWER(2 ,DATEPART(dw ,@Starttime) -1)
107                                OR freq_interval & 2 = POWER(2 ,DATEPART(dw ,@Starttime) -1)
108                                OR freq_interval & 4 = POWER(2 ,DATEPART(dw ,@Starttime) -1)
109                                OR freq_interval & 8 = POWER(2 ,DATEPART(dw ,@Starttime) -1)
110                                OR freq_interval & 16 = POWER(2 ,DATEPART(dw ,@Starttime) -1)
111                                OR freq_interval & 32 = POWER(2 ,DATEPART(dw ,@Starttime) -1)
112                                OR freq_interval & 64 = POWER(2 ,DATEPART(dw ,@Starttime) -1) THEN 0
113                      END
114                 WHEN 16 --Monthly
115                       THEN DATEDIFF(MONTH ,next_scheduled_run_date ,@Starttime)%freq_recurrence_factor
116                      +
117                      CASE
118                           WHEN freq_interval = DAY(@Starttime) THEN 0
119                      END
120                 WHEN 32 --Monthly - Relative to Frequency Interval
121                       THEN DATEDIFF(MONTH ,next_scheduled_run_date ,@Starttime)%freq_recurrence_factor
122                      +
123                      CASE
124                           WHEN freq_interval = DATEPART(dw ,@Starttime) --month of week1-7
125                                AND
126                                (
127                                    (
128                                        freq_relative_interval <= 8
129                                        AND freq_relative_interval = POWER(
130                                                2
131                                               ,DATEDIFF(DAY ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘ ,@Starttime) / 7
132                                            )
133                                    )
134                                    OR (
135                                           freq_relative_interval = 16
136                                           AND DATEDIFF(
137                                                   DAY
138                                                  ,@Starttime
139                                                  ,DATEADD(
140                                                       DAY
141                                                      ,-1
142                                                      ,DATEADD(MONTH ,1 ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘)
143                                                   )
144                                               ) < 7
145                                       )
146                                ) THEN 0
147                           WHEN freq_interval = 8 --month of day
148                                AND

149                                (
150                                    (
151                                        freq_relative_interval = 1
152                                        AND DATEDIFF(DAY ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘ ,@Starttime) = 0
153                                    )
154                                    OR (
155                                           freq_relative_interval = 2
156                                           AND DATEDIFF(DAY ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘02‘ ,@Starttime) = 0
157                                       )
158                                    OR (
159                                           freq_relative_interval = 4
160                                           AND DATEDIFF(DAY ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘03‘ ,@Starttime) = 0
161                                       )
162                                    OR (
163                                           freq_relative_interval = 8
164                                           AND DATEDIFF(DAY ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘04‘ ,@Starttime) = 0
165                                       )
166                                    OR (
167                                           freq_relative_interval = 16
168                                           AND CONVERT(VARCHAR ,@Starttime ,112) =
169                                               CONVERT(
170                                                   VARCHAR
171                                                  ,DATEADD(
172                                                       DAY
173                                                      ,-1
174                                                      ,DATEADD(MONTH ,1 ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘)
175                                                   )
176                                                  ,112
177                                               )
178                                       )
179                                ) THEN 0
180                           WHEN freq_interval = 9 --month of weekday
181                                AND
182                                (
183                                    (
184                                        freq_relative_interval = 1
185                                        AND DATEADD(
186                                                DAY
187                                               ,CASE DATEPART(dw ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘)
188                                                     WHEN 1 THEN 1
189                                                     WHEN 7 THEN 2
190                                                     ELSE 0
191                                                END
192                                               ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘
193                                            ) = CONVERT(VARCHAR ,@Starttime ,112)
194                                    )
195                                    OR (
196                                           freq_relative_interval = 2
197                                           AND DATEADD(
198                                                   DAY
199                                                  ,CASE DATEPART(dw ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘)
200                                                        WHEN 6 THEN 3
201                                                        WHEN 7 THEN 3
202                                                        WHEN 1 THEN 2
203                                                        ELSE 1
204                                                   END
205                                                  ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘
206                                               ) = CONVERT(VARCHAR ,@Starttime ,112)
207                                       )
208                                    OR (
209                                           freq_relative_interval = 4
210                                           AND DATEADD(
211                                                   DAY
212                                                  ,CASE DATEPART(dw ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘)
213                                                        WHEN 5 THEN 4
214                                                        WHEN 6 THEN 4
215                                                        WHEN 7 THEN 4
216                                                        WHEN 1 THEN 3
217                                                        ELSE 2
218                                                   END
219                                                  ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘
220                                               ) = CONVERT(VARCHAR ,@Starttime ,112)
221                                       )
222                                    OR (
223                                           freq_relative_interval = 8
224                                           AND DATEADD(
225                                                   DAY
226                                                  ,CASE DATEPART(dw ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘)
227                                                        WHEN 4 THEN 5
228                                                        WHEN 5 THEN 5
229                                                        WHEN 6 THEN 5
230                                                        WHEN 7 THEN 5
231                                                        WHEN 1 THEN 4
232                                                        ELSE 3
233                                                   END
234                                                  ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘
235                                               ) = CONVERT(VARCHAR ,@Starttime ,112)
236                                       )
237                                    OR (
238                                           freq_relative_interval = 16
239                                           AND DATEADD(
240                                                   DAY
241                                                  ,CASE DATEPART(
242                                                            dw
243                                                           ,DATEADD(
244                                                                DAY
245                                                               ,-1
246                                                               ,DATEADD(MONTH ,1 ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘)
247                                                            )
248                                                        )
249                                                        WHEN 1 THEN -2
250                                                        WHEN 7 THEN -1
251                                                        ELSE 0
252                                                   END
253                                                  ,DATEADD(
254                                                       DAY
255                                                      ,-1
256                                                      ,DATEADD(MONTH ,1 ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘)
257                                                   )
258                                               ) = CONVERT(VARCHAR ,@Starttime ,112)
259                                       )
260                                ) THEN 0
261                           WHEN freq_interval = 10 --month of weekend
262                                AND
263                                (
264                                    (
265                                        freq_relative_interval = 1
266                                        AND DATEADD(
267                                                DAY
268                                               ,CASE DATEPART(dw ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘)
269                                                     WHEN 2 THEN 5
270                                                     WHEN 3 THEN 4
271                                                     WHEN 4 THEN 3
272                                                     WHEN 5 THEN 2
273                                                     WHEN 6 THEN 1
274                                                     ELSE 0
275                                                END
276                                               ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘
277                                            ) = CONVERT(VARCHAR ,@Starttime ,112)
278                                    )
279                                    OR (
280                                           freq_relative_interval = 2
281                                           AND DATEADD(
282                                                   DAY
283                                                  ,CASE DATEPART(dw ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘)
284                                                        WHEN 3 THEN 5
285                                                        WHEN 4 THEN 4
286                                                        WHEN 5 THEN 3
287                                                        WHEN 6 THEN 2
288                                             WHEN 7 THEN 1
289                                                        ELSE 6
290                                                   END
291                                                  ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘
292                                               ) = CONVERT(VARCHAR ,@Starttime ,112)
293                                       )
294                                    OR (
295                                           freq_relative_interval = 4
296                                           AND DATEADD(
297                                                   DAY
298                                                  ,CASE DATEPART(dw ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘)
299                                                        WHEN 2 THEN 12
300                                                        WHEN 3 THEN 11
301                                                        WHEN 4 THEN 10
302                                                        WHEN 5 THEN 9
303                                                        WHEN 6 THEN 8
304                                                        ELSE 7
305                                                   END
306                                                  ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘
307                                               ) = CONVERT(VARCHAR ,@Starttime ,112)
308                                       )
309                                    OR (
310                                           freq_relative_interval = 8
311                                           AND DATEADD(
312                                                   DAY
313                                                  ,CASE DATEPART(dw ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘)
314                                                        WHEN 3 THEN 12
315                                                        WHEN 4 THEN 11
316                                                        WHEN 5 THEN 10
317                                                        WHEN 6 THEN 9
318                                                        WHEN 7 THEN 8
319                                                        ELSE 13
320                                                   END
321                                                  ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘
322                                               ) = CONVERT(VARCHAR ,@Starttime ,112)
323                                       )
324                                    OR (
325                                           freq_relative_interval = 16
326                                           AND DATEADD(
327                                                   DAY
328                                                  ,CASE DATEPART(
329                                                            dw
330                                                           ,DATEADD(
331                                                                DAY
332                                                               ,-1
333                                                               ,DATEADD(MONTH ,1 ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘)
334                                                            )
335                                                        )
336                                                        WHEN 2 THEN -1
337                                                        WHEN 3 THEN -2
338                                                        WHEN 4 THEN -3
339                                                        WHEN 5 THEN -4
340                                                        WHEN 6 THEN -5
341                                                        ELSE 0
342                                                   END
343                                                  ,DATEADD(
344                                                       DAY
345                                                      ,-1
346                                                      ,DATEADD(MONTH ,1 ,CONVERT(CHAR(6) ,@Starttime ,112) + ‘01‘)
347                                                   )
348                                               ) = CONVERT(VARCHAR ,@Starttime ,112)
349                                       )
350                                ) THEN 0
351                      END
352            END  AS daystatus
353           ,CASE
354                 WHEN freq_subday_type IN (0 ,1)
355                      THEN
356                      CASE
357                           WHEN active_start_time*1000
358                                >= CONVERT(INT ,REPLACE(CONVERT(VARCHAR ,@Starttime ,114) ,‘:‘ ,‘‘))
359                                THEN 0
360                           ELSE 1
361                      END
362                 ELSE 0
363            END AS timestaus
364     FROM   [msdb].[dbo].[sysschedules] scd
365            INNER JOIN msdb.dbo.sysjobschedules sjsc
366                 ON  scd.schedule_id = sjsc.schedule_id
367            INNER JOIN (
368                     SELECT a.job_id
369                           ,a.next_scheduled_run_date
370                     FROM   msdb.dbo.sysjobactivity a
371                            INNER JOIN (
372                                     SELECT MAX(session_id) session_id
373                                     FROM   msdb.dbo.syssessions
374                                 ) b
375                                 ON  a.session_id = b.session_id
376                 ) c
377                 ON  sjsc.job_id = c.job_id
378            INNER JOIN msdb.dbo.sysjobs sj

379                 ON  c.job_id = sj.job_id
380     WHERE  scd.enabled = 1
381            AND sj.enabled = 1
382            --AND c.next_scheduled_run_date <= @Midtime
383
384     SET @Starttime = CONVERT(VARCHAR ,DATEADD(DAY ,1 ,@starttime) ,112)
385 END
386 --select * from #RunningJobs order by name,active_start_time
387 SELECT name--作业名称
388       ,plan_type--计划类型
389       ,frequency--执行频率每天、每周、每月
390       ,next_scheduled_run_date--下次计划运行时间
391       ,FirstRunTimeInRange--区间内首次运行时间
392       ,LastRunTimeInRange--区间内末次运行时间
393       ,RunTimesInRange--区间内运行次数
394       ,intercycle--循环间隔
395       ,execution_interval--每天执行频率及区间
396       ,active_start_date--开始日期
397       ,active_end_date--结束日期
398       ,date_created--创建时间
399       ,date_modified--修改时间
400 FROM   (
401            SELECT a.name
402                  ,a.schedule_id
403                  ,a.active_start_time
404                  ,a.starttime
405                  ,a.endtime
406                  ,freq_type,freq_subday_type
407                  ,freq_subday_interval
408                  ,CASE
409                        WHEN [freq_type] = 64 THEN
410                             ‘Start automatically when SQL Server Agent starts‘
411                        WHEN [freq_type] = 128 THEN
412                             ‘Start whenever the CPUs become idle‘
413                        WHEN [freq_type] IN (4 ,8 ,16 ,32) THEN ‘Recurring‘
414                        WHEN [freq_type] = 1 THEN ‘One Time‘
415                   END                    AS plan_type
416                  ,CASE [freq_type]
417                        WHEN 1 THEN ‘One Time‘
418                        WHEN 4 THEN ‘Daily‘
419                        WHEN 8 THEN ‘Weekly‘
420                        WHEN 16 THEN ‘Monthly‘
421                        WHEN 32 THEN ‘Monthly - Relative to Frequency Interval‘
422                        WHEN 64 THEN ‘Start automatically when SQL Server Agent starts‘
423                        WHEN 128 THEN ‘Start whenever the CPUs become idle‘
424                   END                    AS frequency
425                  ,a.next_scheduled_run_date
426                  ,CASE [freq_subday_type]
427                        WHEN 2 THEN DATEADD(
428                                 second
429                                ,(
430                                     freq_subday_interval -
431                                     DATEDIFF(second ,a.active_start_time ,a.starttime)
432                                     %freq_subday_interval
433                                 )%freq_subday_interval
434                                ,a.starttime
435                             )
436                        WHEN 4 THEN DATEADD(
437                                 second
438                                ,(
439                               freq_subday_interval * 60 -
440                                     DATEDIFF(second ,a.active_start_time ,a.starttime)
441                                     %(freq_subday_interval * 60)
442                                 )%(freq_subday_interval * 60)
443                                ,a.starttime
444                             )
445                        WHEN 8 THEN DATEADD(
446                                 second
447                                ,(
448                                     freq_subday_interval * 3600 -
449                                     DATEDIFF(second ,a.active_start_time ,a.starttime)
450                                     %(freq_subday_interval * 3600)
451                                 )%(freq_subday_interval * 3600)
452                                ,a.starttime
453                             )
454                        ELSE a.active_start_time
455                   END                    AS FirstRunTimeInRange
456                  ,CASE [freq_subday_type]
457                        WHEN 2 THEN DATEADD(
458                                 second
459                                ,-DATEDIFF(second ,a.active_start_time ,a.endtime)
460                                 %freq_subday_interval
461                                ,a.endtime
462                             )
463                        WHEN 4 THEN DATEADD(
464                                 second
465                                ,-DATEDIFF(second ,a.active_start_time ,a.endtime)
466                                 %(freq_subday_interval * 60)
467                                ,a.endtime
468                             )
469                        WHEN 8 THEN DATEADD(
470                                 second
471                                ,-DATEDIFF(second ,a.active_start_time ,a.endtime)
472                                 %(freq_subday_interval * 3600)
473                                ,a.endtime
474                             )
475                        ELSE a.active_start_time
476                   END                    AS LastRunTimeInRange
477                  ,CASE [freq_subday_type]
478                        WHEN 2 THEN DATEDIFF(
479                                 second
480                                ,DATEADD(
481                                     second
482                                    ,(
483                                         freq_subday_interval -
484                                         DATEDIFF(second ,a.active_start_time ,a.starttime)
485                                         %freq_subday_interval
486                                     )%freq_subday_interval
487                                    ,a.starttime
488                                 )
489                                ,a.endtime
490                             ) / (freq_subday_interval) + 1
491                        WHEN 4 THEN DATEDIFF(
492                                 second
493                                ,DATEADD(
494                                     second
495                                    ,(
496                                         freq_subday_interval * 60 -
497                                         DATEDIFF(second ,a.active_start_time ,a.starttime)
498                                         %(freq_subday_interval * 60)
499                                     )%(freq_subday_interval * 60)
500                                    ,a.starttime
501                                 )
502                                ,a.endtime
503                             ) / (freq_subday_interval * 60) + 1
504                        WHEN 8 THEN DATEDIFF(
505                                 second
506                                ,DATEADD(
507                                     second
508                                    ,(
509                                         freq_subday_interval * 3600 -
510                                         DATEDIFF(second ,a.active_start_time ,a.starttime)
511                                         %(freq_subday_interval * 3600)
512                                     )%(freq_subday_interval * 3600)
513                                    ,a.starttime
514                               )
515                                ,a.endtime
516                             ) / (freq_subday_interval * 3600) + 1
517                        ELSE 1
518                   END                    AS RunTimesInRange
519                  ,CASE [freq_type]
520                        WHEN 4 THEN ‘Occurs every ‘ + CAST([freq_interval] AS VARCHAR(3))
521                             + ‘ day(s)‘
522                        WHEN 8 THEN ‘Occurs every ‘ + CAST([freq_recurrence_factor] AS VARCHAR(3))
523                             + ‘ week(s) on ‘
524                             + CASE
525                                    WHEN [freq_interval] & 1 = 1 THEN ‘Sunday‘
526                                    ELSE ‘‘
527                               END
528                             + CASE
529                                    WHEN [freq_interval] & 2 = 2 THEN ‘, Monday‘
530                                    ELSE ‘‘
531                               END
532                             + CASE
533                                    WHEN [freq_interval] & 4 = 4 THEN ‘, Tuesday‘
534                                    ELSE ‘‘
535                               END
536                             + CASE
537                                    WHEN [freq_interval] & 8 = 8 THEN ‘, Wednesday‘
538                                    ELSE ‘‘
539                               END
540                             + CASE
541                                    WHEN [freq_interval] & 16 = 16 THEN ‘, Thursday‘
542                                    ELSE ‘‘
543                               END
544                             + CASE
545                                    WHEN [freq_interval] & 32 = 32 THEN ‘, Friday‘
546                                    ELSE ‘‘
547                               END
548                             + CASE
549                                    WHEN [freq_interval] & 64 = 64 THEN ‘, Saturday‘
550                                    ELSE ‘‘
551                               END
552                        WHEN 16 THEN ‘Occurs on Day ‘ + CAST([freq_interval] AS VARCHAR(3))
553                             + ‘ of every ‘ + CAST([freq_recurrence_factor] AS VARCHAR(3))
554                             + ‘ month(s)‘
555                        WHEN 32 THEN ‘Occurs on ‘ + CASE [freq_relative_interval]
556                                                         WHEN 1 THEN ‘First‘
557                                                         WHEN 2 THEN ‘Second‘
558                                                         WHEN 4 THEN ‘Third‘
559                                                         WHEN 8 THEN ‘Fourth‘
560                                                         WHEN 16 THEN ‘Last‘
561                                                    END + ‘ ‘ + CASE
562                                                                     [freq_interval]
563                                                                     WHEN 1 THEN
564                                                                          ‘Sunday‘
565                                                                     WHEN 2 THEN
566                                                                          ‘Monday‘
567                                                                     WHEN 3 THEN
568                                                                          ‘Tuesday‘
569                                                                     WHEN 4 THEN
570                                                                          ‘Wednesday‘
571                                                                     WHEN 5 THEN
572                                                                          ‘Thursday‘
573                                                                     WHEN 6 THEN
574                                                                          ‘Friday‘
575                                                                     WHEN 7 THEN
576                                                                          ‘Saturday‘
577                                                                     WHEN 8 THEN
578                                                                          ‘Day‘
579                                                                     WHEN 9 THEN
580                                                                          ‘Weekday‘
581                                                                     WHEN 10 THEN
582                                                                          ‘Weekend day‘
583                                                                END +
584                             ‘ of every ‘
585                             + CAST([freq_recurrence_factor] AS VARCHAR(3)) +
586                             ‘ month(s)‘
587                   END                    AS intercycle
588                  ,CASE [freq_subday_type]
589                        WHEN 1 THEN ‘Occurs once at ‘ + CONVERT(VARCHAR ,a.active_start_time ,108)
590                        WHEN 2 THEN ‘Occurs every ‘ + CAST([freq_subday_interval] AS VARCHAR(3))
591                             + ‘ Second(s) between ‘ + CONVERT(VARCHAR ,a.active_start_time ,108)
592                             + ‘ and ‘ + CONVERT(VARCHAR ,a.active_end_time ,108)
593                        WHEN 4 THEN ‘Occurs every ‘ + CAST([freq_subday_interval] AS VARCHAR(3))
594                             + ‘ Minute(s) between ‘ + CONVERT(VARCHAR ,a.active_start_time ,108)
595                             + ‘ and ‘ + CONVERT(VARCHAR ,a.active_end_time ,108)
596                        WHEN 8 THEN ‘Occurs every ‘ + CAST([freq_subday_interval] AS VARCHAR(3))
597                             + ‘ Hour(s) between ‘ + CONVERT(VARCHAR ,a.active_start_time ,108)
598                             + ‘ and ‘ + CONVERT(VARCHAR ,a.active_end_time ,108)
599                   END                    AS execution_interval
600                  ,STUFF(
601                       STUFF(CAST([active_start_date] AS VARCHAR(8)) ,5 ,0 ,‘-‘)
602                      ,8,0,‘-‘
603                   )                      AS active_start_date
604                  ,STUFF(
605                       STUFF(CAST([active_end_date] AS VARCHAR(8)) ,5 ,0 ,‘-‘)
606                      ,8,0,‘-‘
607                   )                      AS active_end_date
608                  ,scd.[date_created] AS date_created
609                  ,scd.[date_modified] AS date_modified
610            FROM   #RunningJobs a
611                   INNER JOIN [msdb].[dbo].[sysschedules] scd
612                        ON  a.schedule_id = scd.schedule_id
613            WHERE  a.daystatus = 0
614            AND a.timestaus=0
615        ) a
616 WHERE  a.FirstRunTimeInRange <= a.endtime
617 AND a.FirstRunTimeInRange <= CONVERT(DATETIME ,a.active_end_date + ‘ 23:59:59:997‘)
618 ORDER BY
619        a.name
620       ,a.FirstRunTimeInRange
621
622 DROP TABLE #RunningJobs

执行作业将返回区间内首次执行时间、区间内末次执行时间、区间内执行次数、循环间隔、每天执行频率等信息

获取指定时间区间作业运行情况,布布扣,bubuko.com

时间: 2024-11-04 08:49:18

获取指定时间区间作业运行情况的相关文章

Sql server 查询指定时间区间工作日数、休息日数等日期操作

1.查询指定时间区间的工作日 这个主要难点是法定节假日,国家的法定节假日每年都不一样,还涉及到调休,所以我们设计一个假日表.主要字段有年份,类型(是否调休),假期日期.如下: CREATE TABLE [dbo].[Holidays]( [ID] [int] IDENTITY(1,1) NOT NULL, [Holiday] [datetime2](7) NULL,--假期日期 [YearS] [char](4) NULL,--年份 [daytype] [int] NULL--类型 ) 添加好当

js中使用eval()方法将字符串转换成日期格式、并获取指定时间的日期

1.在js中eval()方法将字符串格式数据转换成日期格式 function getDate(strDate) {         //strDate为需要转换成日期格式的字符串         var date = eval('new Date(' + strDate.replace(/\d+(?=-[^-]+$)/,                 function (a) { return parseInt(a, 10) - 1; }).match(/\d+/g) + ')');    

轻松精通数据库管理之道——运维巡检之六(作业运行情况)

前言 做好日常巡检是数据库管理和维护的重要步骤,而且需要对每次巡检日期.结果进行登记,同时可能需要出一份巡检报告. 本系列旨在解决一些常见的困扰: 不知道巡检哪些东西 不知道怎么样便捷体检 机器太多体检麻烦 生成报告困难,无法直观呈现结果 SQL Server很多业务功能和数据库功能需要通过作业来完成(如之前说的备份,发布订阅等).那么可以看出数据库作业执行的成功与否对整个系统也是至关重要的.大部分情况可以通过作业的邮件通知或监控功能来及时报警,同样在每次巡检中也要确认作业的运行是否正常. 作业

js获取指定时间的前几秒

//指定时间减2秒 function reduceTwoS(dateStr){//dateStr格式为yyyy-mm-dd hh:mm:ss var dt=new Date(dateStr.replace(/-/,"/"));//将传入的日期格式的字符串转换为date对象 兼容ie // var dt=new Date(dateStr);//将传入的日期格式的字符串转换为date对象 非ie var ndt=new Date(dt.getTime()-2000);//将转换之后的时间减

Android 播放视频并获取指定时间的帧画面

最近做的项目要求既能播放视频(类似于视频播放器),又能每隔1s左右获取一帧视频画面,然后对图片进行处理,调查了一周,也被折磨了一周,总算找到了大致符合要求的方法.首先对调查过程中涉及到的方法进行简单介绍,再重点介绍最终所采用的方法,话不多说,进入正题. 一.MediaMetadataRetriever 播放视频并取得画面的一帧,大家最先想到应该都是这个,我同样也最先对它进行了测试,这里使用MediaPlayer进行播放,视频播放界面使用SurfaceView来实现. public class P

Java获取指定时间(转)

说明:从LocalDate的API上看,主要用于快速获取当前年月日,而DateFormatter也基本上伴随着使用.如果是操作Date对象的,主要是用于时间戳等,伴随着使用的是SimpleDateFormat. 1.Java 7及之前版本1.1.使用java.util.Calendar(不推荐) import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import

java获取指定时间

1.上代码 1 package com.hynn.gajq.service.user; 2 3 import java.sql.Timestamp; 4 import java.text.ParseException; 5 import java.text.SimpleDateFormat; 6 import java.util.Calendar; 7 import java.util.Date; 8 import java.util.TimeZone; 9 10 import org.apac

指定时间区间执行监控项 时间间隔

注意项 间隔为0表示监控项不采集数据,有关闭的期间,就必须有开启的期间 在规定的 0间隔期间外,监控项开始去采集数据. 除了这种方法 还可以在触发器中指定对时间的判断,从而实现对特定时间段的监控及告警. 原文地址:https://www.cnblogs.com/0916m/p/11740319.html

Linux/UNIX编程:获取指定用户所有正在运行的进程ID和进程名

先用系统函数 `getpwnam` 获得指定用户名的 UID,然后遍历 /proc/ 中所有 PID 目录,如果 /proc/PID/status 中的 UID 是输入用户名对应的 UID 则输出该 status 文件中的进程名,进程ID就是目录名. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <dirent.h> #