2010-11-11 76 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来代替。