2010-11-11 82 views
2

我怎樣才能獲得最後運行結果與master.dbo.xp_sqlagent_enum_jobsmaster.dbo.xp_sqlagent_enum_jobs - 如何獲得上次運行結果

CREATE TABLE #enum_job 
(
    Job_ID UNIQUEIDENTIFIER, 
    Last_Run_Date INT, 
    Last_Run_Time INT, 
    Next_Run_Date INT, 
    Next_Run_Time INT, 
    Next_Run_Schedule_ID INT, 
    Requested_To_Run INT, 
    Request_Source INT, 
    Request_Source_ID VARCHAR(100), 
    Running INT, 
    Current_Step INT, 
    Current_Retry_Attempt INT, 
    State INT 
) 
INSERT INTO #enum_job 
    EXEC master.dbo.xp_sqlagent_enum_jobs 1, garbage 
SELECT * 
FROM #enum_job 

回答

0

你的問題是有點不清楚,你不說的是哪個版本MSSQL你有,但假設你想找到爲每個作業最近的工作結果,那麼你可以簡單地直接查詢工作表:

select 
    j.name as 'Job', jh.run_status as 'Result of last run' 
from 
    msdb.dbo.sysjobs j 
    join msdb.dbo.sysjobhistory jh 
    on j.job_id = jh.job_id 
where 
    jh.step_id = 0 and 
    jh.run_date = (select max(run_date) from msdb.dbo.sysjobhistory where job_id = jh.job_id) and 
    jh.run_time = (select max(run_time) from msdb.dbo.sysjobhistory where job_id = jh.job_id and run_date = jh.run_date) 

sysjobhistory的文檔run_status值的列表。作業表將日期和時間分別存儲爲整數,所以如果您進行了大量查詢,則可能需要編寫一個函數將(run_date, run_time)對轉換爲單個datetime值。一般來說,從TSQL查詢工作信息並不容易,所以你可以考慮使用Smo來代替。