我实际上是在 SQL 2005 中研究 SP。使用 SP 我正在创建一个作业并将其安排在特定的时间。由于数据库非常庞大,这些作业至少需要 5 到 10 分钟才能完成。但我不知道如何检查作业的状态。我想知道它是否已成功完成或执行中是否有任何错误。在异常情况下,我还会返回正确的错误代码。但我不知道在哪里可以检查此错误代码。
3 回答
这是我能找到的,也许它可以解决你的问题:
- SP 获取当前工作活动。
exec msdb.dbo.sp_help_jobactivity @job_id = (your job_id here)
您可以执行此 SP 并将结果放在临时表中并从那里获取所需的结果。
否则看看这些表:
msdb.dbo.sysjobactivity
msdb.dbo.sysjobhistory
运行以下命令以查看这些表之间的关联。
执行 sp_helptext sp_help_jobactivity
--在查询分析器中复制并正确格式化,以便您轻松理解 --使用查询执行任务(作业) exec msdb.dbo.sp_start_job @job_name ='作业名称',@server_name =服务器名称 --执行后查询是否已完成 声明 @JobId 为 varchar(36) 选择 @JobId = job_id from sysjobs where name = 'Your Job Name' Declare @JobStatus as int set @JobStatus = -1 While @JobStatus <= -1 Begin --根据您的 Job 提供 TimeDelay select @JobStatus = isnull(run_status ,-1) from sysjobactivity JA,sysjobhistory JH where JA.job_history_id = JH.instance_id and JA.job_id = @JobId End select @JobStatus
null = 运行 1 = Fininshed 成功 0 = 错误完成
--一旦你的工作完成,你就会得到结果
Use msdb
go
select distinct j.Name as "Job Name", j.description as "Job Description", h.run_date as LastStatusDate,
case h.run_status
when 0 then 'Failed'
when 1 then 'Successful'
when 3 then 'Cancelled'
--when 4 then 'In Progress'
end as JobStatus
from sysJobHistory h, sysJobs j
where j.job_id = h.job_id and h.run_date =
(select max(hi.run_date) from sysJobHistory hi where h.job_id = hi.job_id)
order by 1