A simple query to check rapidly your job’s status and duration.
Useful for fast monitoring on many instances.
No more thing s to say: this is the code based on msdb..sysjobs and msdb..sysjobhistory. It’s easy if necessary filtering a single job id or jobs durations too long.
select job_id, job_name, run_datetime, SUBSTRING(run_duration, 1, 2) + ':' + SUBSTRING(run_duration, 3, 2) + ':' + SUBSTRING(run_duration, 5, 2) AS run_duration, convert(int,SUBSTRING(run_duration, 1, 2))*60 + convert(int,SUBSTRING(run_duration, 3, 2)) as [min], convert(float,SUBSTRING(run_duration, 5, 2)) as [sec] from ( select j.job_id, job_name, DATEADD(hh, -7, run_datetime) as run_datetime, run_duration = RIGHT('000000' + CONVERT(varchar(6), h.run_duration), 6) from ( select j.name as job_name, run_datetime = max(CONVERT(DATETIME, RTRIM(run_date)) + (run_time * 9 + run_time % 10000 * 6 + run_time % 100 * 10) / 216e4) from msdb..sysjobhistory h inner join msdb..sysjobs j on h.job_id = j.job_id group by j.name ) t inner join msdb..sysjobs j on t.job_name = j.name inner join msdb..sysjobhistory h on j.job_id = h.job_id and t.run_datetime = CONVERT(DATETIME, RTRIM(h.run_date)) + (h.run_time * 9 + h.run_time % 10000 * 6 + h.run_time % 100 * 10) / 216e4 ) dt --where job_Id=@job_id