【发布时间】:2014-01-23 14:13:10
【问题描述】:
如何使用 SQL 在 SQL Server 代理中获取上次运行作业的详细信息,包括仅针对上次运行作业(不是作业结果)的步骤详细信息,因为我想在应用程序中显示它
请帮我解决这个问题已经很久了
这是我在下面一直使用的代码,它会返回 Job History 中所有 Jobs 的所有步骤,
但是,我只想查看 last 运行作业的步骤
谢谢
USE msdb
Go
SELECT j.name JobName,h.step_name StepName,
CONVERT(CHAR(10), CAST(STR(h.run_date,8, 0) AS dateTIME), 111) RunDate,
STUFF(STUFF(RIGHT('000000' + CAST ( h.run_time AS VARCHAR(6 ) ) ,6),5,0,':'),3,0,':') RunTime,
h.run_duration StepDuration,
case h.run_status when 0 then 'Failed'
when 1 then 'Succeeded'
when 2 then 'Retry'
when 3 then 'Cancelled'
when 4 then 'In Progress'
end as ExecutionStatus,
h.message MessageGenerated
FROM sysjobhistory h
inner join sysjobs j
ON j.job_id = h.job_id
LEFT JOIN (
SELECT
[job_id]
, [run_date]
, [run_time]
, [run_status]
, [run_duration]
, [message]
, ROW_NUMBER() OVER (
PARTITION BY [job_id]
ORDER BY [run_date] DESC, [run_time] DESC
) AS RowNumber
FROM [msdb].[dbo].[sysjobhistory]
WHERE [step_id] = 0
) AS [sJOBH]
ON j.[job_id] = [sJOBH].[job_id]
AND [sJOBH].[RowNumber] = 1
where j.job_id = 'F04E5D3B-C873-448A-805C-C6309A92DAEC'
ORDER BY j.name, h.run_date, h.run_time desc
GO
【问题讨论】:
-
您可以将此查询与另一个执行 Max(last_run_date) 的查询结合起来,按您的工作名称分组。然后你的 join 子句可以加入工作,还有 last_run_date
标签: sql sql-server sql-server-agent