Eh bien, vous pouvez exécuter la requête suivante pour récupérer les travaux exécutés entre deux fois ou vous pouvez modifier l' WHERE
expression pour intercepter les travaux exécutés pendant une certaine durée.
SELECT sj.name,
sjh.step_name,
sjh.step_id,
--sjh.run_status,
STUFF(STUFF(CAST(sjh.run_date as nvarchar(10)),5,0,'.'),8,0,'.') as HistRunDate,
STUFF(STUFF(RIGHT(REPLICATE('0', 6) + CAST(sjh.run_time as varchar(6)), 6), 3, 0, ':'), 6, 0, ':') as HistRunTime,
STUFF(STUFF(STUFF(RIGHT(REPLICATE('0', 8) + CAST(sjh.run_duration as varchar(8)), 8), 3, 0, ':'), 6, 0, ':'), 9, 0, ':') as HistRunDuration
--,sjh.run_status AS JobStatus
FROM msdb.dbo.sysjobs AS sj
join msdb.dbo.sysjobhistory AS sjh --- was sysjobschedule sjc
on sjh.job_id = sj.job_id
WHERE 1=1
--AND sj.enabled = 1
------------------------------------------
-- for a certain time frame
------------------------------------------
AND ((sjh.run_date = 20170617 and sjh.run_time > 200000)
or (sjh.run_date = 20170722 and sjh.run_time < 100000))
------------------------------------------
-- between certain dates and with a long duration
------------------------------------------
--AND (sjh.run_date > 20160501) AND (sjh.run_date < 20160503)
--and sjh.run_duration > 3000
------------------------------------------
-- Job Outcome not required
------------------------------------------
--and sjh.step_name != '(Job outcome)'
--and sjh.step_id = 0
------------------------------------------
-- Find failed jobs
------------------------------------------
--and sjh.run_status != 1
ORDER BY
sjh.run_date,
sjh.run_time
Comme McNets l'a souligné, il existe différentes façons de récupérer la date souhaitée . Il est bon de savoir cependant que les dates et heures sont définies comme INT
dans les sys.jobsxxxx
tableaux et non pas comme des dates et des heures comme on pourrait s'y attendre.
Référence: dbo.sysjobhistory (Transact-SQL) (Microsoft Technet)