2015-11-04 79 views
0

我需要一个SQL查询,它应该为我提供SQL Server中所有作业的最新状态。SQL查询以获取SQL Server中所有作业的状态

查询下面我试图获得状态,但它不会给出SQL服务器中所有作业的状态。

SELECT DISTINCT name AS [Job Name], 
    CASE WHEN enabled=1 THEN 'Enabled' 
     ELSE 'Disabled' 
    END [Job Status], 
    CASE WHEN SJH.run_status=0 THEN 'Failed' 
      WHEN SJH.run_status=1 THEN 'Succeeded' 
      WHEN SJH.run_status=2 THEN 'Retry' 
      WHEN SJH.run_status=3 THEN 'Cancelled' 
    ELSE 'Unknown' 
    END [Job Outcome], 
    sjh.run_date, 
    sjh.run_time 
FROM SYSJobs sj 
LEFT JOIN SYSJobHistory sjh 
ON  sj.job_id = sjh.job_id 
WHERE (
    sjh.run_date IN (
        SELECT MAX(sjh1.run_date) 
        FROM SYSJobHistory sjh1 
        WHERE sjh.job_id = sjh1.job_id 
        ) 
    OR sjh.run_date IS NULL 
    ) 
AND  (
    sjh.run_time IN (
        SELECT MAX(sjh1.run_time) 
        FROM SYSJobHistory sjh1 
        WHERE sjh.job_id = sjh1.job_id 
        ) 
    OR sjh.run_time IS NULL 
    ) 
ORDER BY [Job Name] 

回答

0

尝试使用Row_Number()

;With Cte 
as 
(
    SELECT name AS [Job Name], 
     CASE WHEN enabled=1 THEN 'Enabled' 
      ELSE 'Disabled' 
     END [Job Status], 
     CASE WHEN SJH.run_status=0 THEN 'Failed' 
     WHEN SJH.run_status=1 THEN 'Succeeded' 
     WHEN SJH.run_status=2 THEN 'Retry' 
     WHEN SJH.run_status=3 THEN 'Cancelled' 
     ELSE 'Unknown' 
     END [Job Outcome], 
     sjh.run_date, 
     sjh.run_time,Row_Number() Over(Partition by name Order By sjh.run_date desc,sjh.run_time desc) as rn 
    FROM SYSJobs sj 
    LEFT JOIN SYSJobHistory sjh 
    ON  sj.job_id = sjh.job_id 
) 

select * from cte where rn=1 

如果您din't了解情况,然后就看Row_Number()

+0

感谢您的支持。查询按预期工作。 – VENKATESH

0

使用此

select distinct j.Name as "Job Name", 
case jh.run_status 
when 0 then 'Failed' 
when 1 then 'Successful' 
when 2 then 'Retry' 
when 3 then 'Cancelled' 
when 4 then 'In Progress' 
end as Job_Execution_Status 
from sysJobHistory jh, sysJobs j 
where j.job_id = jh.job_id 
+0

谢谢您的支持。查询正在工作,但它提供了作业中每个步骤的状态。我需要工作状态而不是工作中的步骤 – VENKATESH

+1

4在sql2008中不再支持向上 – aMazing