以下是我在网上找到的一个脚本,其中包含我在结果集中想要的大部分元素。唯一缺少的是如何获得一个确定时间段内的平均运行时间,例如一周、10 天、23 天、一个月等。
我已经进行了一些搜索,但是我尝试过的方法以某种方式失败了。此外,我的 TSQL 很弱,但我正在阅读 Itzik Ben-gan 的出版物来改变这个问题。我真的很感激任何人可以提供的任何帮助。
select job_name, run_datetime, run_duration
from
(
select job_name, run_datetime,
SUBSTRING(run_duration, 1, 2) + ':' + SUBSTRING(run_duration, 3, 2) + ':' +
SUBSTRING(run_duration, 5, 2) AS run_duration
from
(
select DISTINCT
j.name as job_name,
run_datetime = CONVERT(DATETIME, RTRIM(run_date)) +
(run_time * 9 + run_time % 10000 * 6 + run_time % 100 * 10) / 216e4,
run_duration = RIGHT('000000' + CONVERT(varchar(6), run_duration), 6)
from msdb..sysjobhistory h
inner join msdb..sysjobs j
on h.job_id = j.job_id
) t
) t
order by job_name, run_datetime
更新以满足新要求。请注意,您可能很想使用
CONVERT(TIME
,但要抵制 - 这很脆弱,如果任何工作运行时间超过 24 小时。更新的脚本