我需要开发一个重复出现的SQL Server代理作业列表(并希望将其转换为甘特图)。对正常计划的作业执行此操作是一个常见问题,我遇到了许多用于解决它的示例查询。我无法找到的是如何为定期运行但不的计划提取数据。可以说,我们最重要的工作是由其他计划引发的。 (这就是为什么Last_Ran_Time对我来说比Next_Run_Time更重要,因为SQL Server不知道它们何时会被调用。)
我要问的是SQL Server在何处/如何存储有关非预定作业的信息。到目前为止,我发现的所有例子都删除了从外部调用的工作。最后,拥有工作名称,平均持续时间和最后时间(或结束时间)会很不错。
答案 0 :(得分:1)
select j.name as [Job Name], sum(run_duration) / count(distinct instance_id) as [Average Duration], max(cast(cast (run_date as varchar(32)) + ' ' + stuff(stuff(reverse(substring(reverse('0' + cast(run_time as varchar(32))), 1, 6)), 3, 0, ':'), 6, 0, ':') as datetime2)) as [Last Ran Time]
from msdb..sysjobs j
inner join msdb..sysjobhistory h on h.job_id = j.job_id
left outer join msdb..sysjobschedules s on j.job_id = s.job_id
where s.job_id is null
group by j.name
仅返回与计划无关的作业的数据。
答案 1 :(得分:0)
那么你是如何找到有关预定工作的信息的呢? 这应该可以帮到你:
select top 100
*
from msdb..sysjobhistory h
inner join msdb..sysjobs j
on h.job_id = j.job_id