2008-09-24 63 views
2

我实际上正在使用SQL 2005中的SP。使用SP我创建了一个作业并且计划了一段特定的时间。这些工作需要至少5到10分钟才能完成,因为数据库非常庞大。但我不知道如何检查作业的状态。我想知道它是否已成功完成或执行中是否有任何错误。在例外我也返回适当的错误代码。但我不知道我在哪里可以检查这个错误代码。SQL作业状态

回答

3

这是我能找到的,也许它解决您的问题:

  1. SP来得到当前的工作activiity。
exec msdb.dbo.sp_help_jobactivity @job_id = (your job_id here) 

可以执行该SP和结果放在一个临时表,并从那里得到所需的结果。

否则看看这些表:

  • msdb.dbo.sysjobactivity

  • msdb.dbo.sysjobhistory

运行下面看到它们之间的关联表。

EXEC sp_helptext的sp_help_jobactivity

0

--copy在查询analizer和使用查询 EXEC msdb.dbo.sp_start_job格式化正确,所以你可以easyly理解 - 若要执行你的任务(工作) @job_name ='作业名称',@ server_name =服务器名称 - 执行查询以检查它是否已完成 声明@JobId作为varchar(36) 从sysjobs中选择@JobId = job_id其中name ='您的作业名称' 将@JobStatus声明为int set @JobStatus = -1 虽然@JobStatus < = -1 开始 --Provide根据纯滞后您的工作 选择@JobStatus = ISNULL(run_status,-1) 从sysjobactivity JA,sysjobhistory JH 其中JA.job_history_id = JH.instance_id和JA.job_id = @JobId 结束 选择@JobStatus

空=运行 1 = Fininshed成功 0 =完成了错误

--Once你的工作将fininsh你会得到结果

0

我得到了一个更好的代码从here

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 
+1

警告:4(进行中)不会发生(http://msdn.microsoft.com/en-us/library/ms174997.aspx) – 2010-05-26 15:18:24