如何查询重复但非计划的SQL代理作业

时间:2013-04-09 15:16:46

标签: sql-server sql-agent-job

我需要开发一个重复出现的SQL Server代理作业列表(并希望将其转换为甘特图)。对正常计划的作业执行此操作是一个常见问题,我遇到了许多用于解决它的示例查询。我无法找到的是如何为定期运行但的计划提取数据。可以说,我们最重要的工作是由其他计划引发的。 (这就是为什么Last_Ran_Time对我来说比Next_Run_Time更重要,因为SQL Server不知道它们何时会被调用。)

我要问的是SQL Server在何处/如何存储有关非预定作业的信息。到目前为止,我发现的所有例子都删除了从外部调用的工作。最后,拥有工作名称,平均持续时间和最后时间(或结束时间)会很不错。

2 个答案:

答案 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