This info should be easier to get than it is. Keep in mind that for something to run the subscription and schedule both have to be enabled.
To be fair, the majority of this code was grabbed from the internet, and this is not something I modified to the extent that I could call it my own. Michael Abair is the original author, and the original code can be found at the link below. My contribution is limited to very minor changes and a lot of hitting the tab key. I know it works just as well, maybe even 2ms faster, without the whitespace, but I had to do it.
http://www.sqlservercentral.com/scripts/Jobs/69088/
SELECT /*S.job_id,*/ S.job_name, S.is_job_enabled, S.is_schedule_enabled, S.schedule_name, S.Description ,avg_duration_in_seconds = avg(datediff(s, '1/1/2000', ('1/1/2000 ' + cast(stuff(stuff(right('000000' + cast(h.run_duration as varchar(6)), 6),5,0,':'),3,0,':') as datetime)))) ,number_of_runs = count(1) FROM (SELECT SJ.job_id , SJ.name as job_name , SJ.enabled as is_job_enabled , SS.enabled as is_schedule_enabled , SS.name as schedule_name , CASE freq_type WHEN 1 THEN 'Occurs on ' + STUFF(RIGHT(active_start_date, 4), 3,0, '/') + '/' + LEFT(active_start_date, 4) + ' at ' + REPLACE( RIGHT(CONVERT(varchar(30), CAST(convert(varchar(8), STUFF(STUFF(RIGHT('000000' + CAST(active_start_time as varchar(10)), 6), 3, 0, ':' ), 6, 0, ':' ), 8) as datetime) /* hh:mm:ss 24H */, 9), 14), ':000', ' ') /* HH:mm:ss:000AM/PM then replace the :000 with space.*/ WHEN 4 THEN 'Occurs every ' + CAST(freq_interval as varchar(10)) + ' day(s) ' + CASE freq_subday_type WHEN 1 THEN 'at '+ LTRIM(REPLACE( RIGHT(CONVERT(varchar(30), CAST(convert(varchar(8), STUFF(STUFF(RIGHT('000000' + CAST(active_start_time as varchar(10)), 6), 3, 0, ':' ), 6, 0, ':' ), 8) as datetime), 9), 14), ':000', ' ')) WHEN 2 THEN 'every ' + CAST(freq_subday_interval as varchar(10)) + ' second(s)' WHEN 4 THEN 'every ' + CAST(freq_subday_interval as varchar(10)) + ' minute(s)' WHEN 8 THEN 'every ' + CAST(freq_subday_interval as varchar(10)) + ' hour(s)' ELSE '' END + CASE WHEN freq_subday_type in (2,4,8) /* repeat seconds/mins/hours */ THEN ' between '+ LTRIM(REPLACE( RIGHT(CONVERT(varchar(30), CAST(convert(varchar(8), STUFF(STUFF(RIGHT('000000' + CAST(active_start_time as varchar(10)), 6), 3, 0, ':' ), 6, 0, ':' ), 8) as datetime), 9), 14), ':000', ' ')) + ' and ' + LTRIM(REPLACE( RIGHT(CONVERT(varchar(30), CAST(convert(varchar(8), STUFF(STUFF(RIGHT('000000' + CAST(active_end_time as varchar(10)), 6), 3, 0, ':' ), 6, 0, ':' ), 8) as datetime), 9), 14), ':000', ' ')) ELSE '' END WHEN 8 THEN 'Occurs every ' + CAST(freq_recurrence_factor as varchar(10)) + ' week(s) on ' + REPLACE( CASE WHEN freq_interval&1 = 1 THEN 'Sunday, ' ELSE '' END + CASE WHEN freq_interval&2 = 2 THEN 'Monday, ' ELSE '' END + CASE WHEN freq_interval&4 = 4 THEN 'Tuesday, ' ELSE '' END + CASE WHEN freq_interval&8 = 8 THEN 'Wednesday, ' ELSE '' END + CASE WHEN freq_interval&16 = 16 THEN 'Thursday, ' ELSE '' END + CASE WHEN freq_interval&32 = 32 THEN 'Friday, ' ELSE '' END + CASE WHEN freq_interval&64 = 64 THEN 'Saturday, ' ELSE '' END + '|', ', |', ' ') /* get rid of trailing comma */ + CASE freq_subday_type WHEN 1 THEN 'at '+ LTRIM(REPLACE( RIGHT(CONVERT(varchar(30), CAST(convert(varchar(8), STUFF(STUFF(RIGHT('000000' + CAST(active_start_time as varchar(10)), 6), 3, 0, ':' ), 6, 0, ':' ), 8) as datetime), 9), 14), ':000', ' ')) WHEN 2 THEN 'every ' + CAST(freq_subday_interval as varchar(10)) + ' second(s)' WHEN 4 THEN 'every ' + CAST(freq_subday_interval as varchar(10)) + ' minute(s)' WHEN 8 THEN 'every ' + CAST(freq_subday_interval as varchar(10)) + ' hour(s)' ELSE '' END + CASE WHEN freq_subday_type in (2,4,8) /* repeat seconds/mins/hours */ THEN ' between '+ LTRIM(REPLACE( RIGHT(CONVERT(varchar(30), CAST(convert(varchar(8), STUFF(STUFF(RIGHT('000000' + CAST(active_start_time as varchar(10)), 6), 3, 0, ':' ), 6, 0, ':' ), 8) as datetime), 9), 14), ':000', ' ')) + ' and ' + LTRIM(REPLACE( RIGHT(CONVERT(varchar(30), CAST(convert(varchar(8), STUFF(STUFF(RIGHT('000000' + CAST(active_end_time as varchar(10)), 6), 3, 0, ':' ), 6, 0, ':' ), 8) as datetime), 9), 14), ':000', ' ')) ELSE '' END WHEN 16 THEN 'Occurs every ' + CAST(freq_recurrence_factor as varchar(10)) + ' month(s) on ' + 'day ' + CAST(freq_interval as varchar(10)) + ' of that month ' + CASE freq_subday_type WHEN 1 THEN 'at '+ LTRIM(REPLACE( RIGHT(CONVERT(varchar(30), CAST(convert(varchar(8), STUFF(STUFF(RIGHT('000000' + CAST(active_start_time as varchar(10)), 6), 3, 0, ':' ), 6, 0, ':' ), 8) as datetime), 9), 14), ':000', ' ')) WHEN 2 THEN 'every ' + CAST(freq_subday_interval as varchar(10)) + ' second(s)' WHEN 4 THEN 'every ' + CAST(freq_subday_interval as varchar(10)) + ' minute(s)' WHEN 8 THEN 'every ' + CAST(freq_subday_interval as varchar(10)) + ' hour(s)' ELSE '' END + CASE WHEN freq_subday_type in (2,4,8) /* repeat seconds/mins/hours */ THEN ' between '+ LTRIM(REPLACE( RIGHT(CONVERT(varchar(30), CAST(convert(varchar(8), STUFF(STUFF(RIGHT('000000' + CAST(active_start_time as varchar(10)), 6), 3, 0, ':' ), 6, 0, ':' ), 8) as datetime), 9), 14), ':000', ' ')) + ' and ' + LTRIM(REPLACE( RIGHT(CONVERT(varchar(30), CAST(convert(varchar(8), STUFF(STUFF(RIGHT('000000' + CAST(active_end_time as varchar(10)), 6), 3, 0, ':' ), 6, 0, ':' ), 8) as datetime), 9), 14), ':000', ' ')) ELSE '' END WHEN 32 THEN 'Occurs ' + CASE freq_relative_interval WHEN 1 THEN 'every first ' WHEN 2 THEN 'every second ' WHEN 4 THEN 'every third ' WHEN 8 THEN 'every fourth ' WHEN 16 THEN 'on the last ' END + CASE freq_interval WHEN 1 THEN 'Sunday' WHEN 2 THEN 'Monday' WHEN 3 THEN 'Tuesday' WHEN 4 THEN 'Wednesday' WHEN 5 THEN 'Thursday' WHEN 6 THEN 'Friday' WHEN 7 THEN 'Saturday' WHEN 8 THEN 'day' WHEN 9 THEN 'weekday' WHEN 10 THEN 'weekend' END + ' of every ' + CAST(freq_recurrence_factor as varchar(10)) + ' month(s) ' + CASE freq_subday_type WHEN 1 THEN 'at '+ LTRIM(REPLACE( RIGHT(CONVERT(varchar(30), CAST(convert(varchar(8), STUFF(STUFF(RIGHT('000000' + CAST(active_start_time as varchar(10)), 6), 3, 0, ':' ), 6, 0, ':' ), 8) as datetime), 9), 14), ':000', ' ')) WHEN 2 THEN 'every ' + CAST(freq_subday_interval as varchar(10)) + ' second(s)' WHEN 4 THEN 'every ' + CAST(freq_subday_interval as varchar(10)) + ' minute(s)' WHEN 8 THEN 'every ' + CAST(freq_subday_interval as varchar(10)) + ' hour(s)' ELSE '' END + CASE WHEN freq_subday_type in (2,4,8) /* repeat seconds/mins/hours */ THEN ' between '+ LTRIM(REPLACE( RIGHT(CONVERT(varchar(30), CAST(convert(varchar(8), STUFF(STUFF(RIGHT('000000' + CAST(active_start_time as varchar(10)), 6), 3, 0, ':' ), 6, 0, ':' ), 8) as datetime), 9), 14), ':000', ' ')) + ' and ' + LTRIM(REPLACE( RIGHT(CONVERT(varchar(30), CAST(convert(varchar(8), STUFF(STUFF(RIGHT('000000' + CAST(active_end_time as varchar(10)), 6), 3, 0, ':' ), 6, 0, ':' ), 8) as datetime), 9), 14), ':000', ' ')) ELSE '' END WHEN 64 THEN 'Runs when the SQL Server Agent service starts' WHEN 128 THEN 'Runs when the computer is idle' END AS [Description] FROM msdb.dbo.sysjobs SJ INNER JOIN msdb.dbo.sysjobschedules SJS ON SJ.job_id = SJS.job_id INNER JOIN msdb.dbo.sysschedules SS ON SJS.schedule_id = SS.schedule_id INNER JOIN msdb.dbo.syscategories SC ON SJ.category_id = SC.category_id --WHERE SC.name = 'Name from query below' ) S INNER JOIN msdb.dbo.sysjobhistory H ON s.job_id = H.job_id AND H.step_id = 0 WHERE H.run_date >= /* 7 days ago */cast(datepart(yyyy, dateadd(d, -7, getDate())) as VarChar(10)) + cast(datepart(mm, dateadd(d, -7, getDate())) as VarChar(10)) + cast(datepart(dd, dateadd(d, -7, getDate())) as VarChar(10)) --format getDate once to compare against multiple run_dates GROUP BY /*S.job_id,*/ S.job_name, S.is_job_enabled, S.is_schedule_enabled, S.schedule_name, S.Description ORDER BY S.job_name --SELECT * FROM msdb..syscategories --If you want to uncomment the line "WHERE SC.name = ...", copy/paste from this
Filed under: Scripts, SQL Agent, SQL Server Tagged: Jobs, MSDB, Schedules, SQL Agent, syscategories, sysjobhistory, sysjobs, sysjobschedules, sysschedules