Votre question est un peu floue et vous ne dites pas quelle version de MSSQL vous avez, mais en supposant que vous voulez trouver le résultat le plus récent pour chaque travail, vous pouvez simplement interroger les tables de travail directement :
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)
Voir la documentation de sysjobhistory
pour une liste de valeurs run_status. Les tables de travail stockent séparément la date et l'heure sous forme d'entiers. Si vous effectuez beaucoup de requêtes, vous pouvez écrire une fonction permettant de convertir une valeur ( run_date, run_time
) en une seule paire datetime
valeur. En général, l'interrogation des informations sur les emplois à partir de TSQL n'est pas aussi facile qu'elle devrait l'être, vous pouvez donc envisager d'utiliser Smo à la place.