2013-04-09 73 views
-1

我需要開發週期性SQL Server代理作業的列表(並希望將其轉換爲甘特圖)。爲正常預定的工作做這件事是一個常見問題,我遇到了很多解決它的示例查詢。我一直無法找到的是如何爲定期運行的作業提供數據,但如何按計劃運行而不是。可以說我們最重要的工作是由其他項目觸發的。 (這就是爲什麼Last_Ran_Time對我來說比Next_Run_Time更重要,因爲SQL Server不知道它們什麼時候會被調用。)如何查詢週期性但未計劃的SQL代理作業

我在問的是SQL Server如何存儲有關非調度信息的位置/方式工作。到目前爲止,我發現的所有例子都削減了從外部調用的工作。最後,擁有作業名稱,平均持續時間和最後運行時間(或結束時間)會很好。

回答

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 

只有不與時間表關聯的作業返回數據。

+0

這看起來很有前途,但我得到了錯誤「將varchar數據類型轉換爲日期時間數據類型導致超出範圍的值。」當我試圖運行它。 – mrae 2013-04-09 19:54:05

+0

現在有幫助嗎?我已更改爲使用'datetime2'。對於日期時間,您必須具有超出範圍的值。您也可以刪除演員到日期時間,以查看該值是什麼。 – muhmud 2013-04-09 20:22:40

+0

我刪除了演員。我可以像這樣工作。非常感謝。 – mrae 2013-04-09 22:31:29

0

那麼你是如何找到預定工作的信息? 這會幫助你:

select top 100 
    * 
from msdb..sysjobhistory h 
inner join msdb..sysjobs j 
    on h.job_id = j.job_id