-1

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

我要问的是 SQL Server 在哪里/如何存储有关非计划作业的信息。到目前为止,我发现的所有示例都删除了从外部调用的工作。最后,最好有 Job Name、Average Duration 和 Last Ran Time(或结束时间)。

4

2 回答 2

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

仅返回与计划无关的作业的数据。

于 2013-04-09T15:38:36.660 回答
0

那么,您是如何找到有关预定工作的信息的呢?这应该可以帮助您:

select top 100 
    * 
from msdb..sysjobhistory h
inner join msdb..sysjobs j
    on h.job_id = j.job_id
于 2013-04-09T15:21:50.050 回答