3 votes

master.dbo.xp_sqlagent_enum_jobs - comment obtenir le résultat de la dernière exécution ?

Comment puis-je obtenir le résultat de la dernière exécution avec master.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

1voto

Pondlife Points 10490

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X