需要有一个存储过程来调用 SQL Server 代理作业并返回作业是否成功运行。
到目前为止我已经
CREATE PROCEDURE MonthlyData
AS
EXEC msdb.dbo.sp_start_job N'MonthlyData'
WAITFOR DELAY '000:04:00'
EXEC msdb.dbo.sp_help_jobhistory @job_name = 'MonthlyData'
GO
哪个启 Action 业,如果作业运行成功或失败,返回的最佳方式是什么?
好的,进行了编辑并使用了 WAITFOR DELAY,因为该作业通常运行 3-4 分钟,但绝不会超过 4 分钟。该作业是否可以完成,但有更有效的方法吗?
最佳答案
对于所有不允许使用OPENROWSET命令的人来说,这可能会有所帮助。我在这里找到了解决方案的起点:
这依赖于这样一个事实:msdb.dbo.sysjobactivity 表的某些列在作业以某种方式完成后首先被填充。
-- Start job
DECLARE @job_name NVARCHAR(MAX) = 'JobName'
EXEC msdb.dbo.sp_start_job @job_name = @job_name
-- Wait for job to finish
DECLARE @job_history_id AS INT = NULL
WHILE @time_constraint = @ok
BEGIN
SELECT TOP 1 @job_history_id = activity.job_history_id
FROM msdb.dbo.sysjobs jobs
INNER JOIN msdb.dbo.sysjobactivity activity ON activity.job_id = jobs.job_id
WHERE jobs.name = @job_name
ORDER BY activity.start_execution_date DESC
IF @job_history_id IS NULL
BEGIN
WAITFOR DELAY '00:00:10'
CONTINUE
END
ELSE
BREAK
END
-- Check exit code
SELECT history.run_status
FROM msdb.dbo.sysjobhistory history
WHERE history.instance_id = @job_history_id
您可能需要检查 WHILE 循环允许运行的时间。我选择将该部分保留在示例之外。
Microsoft 有关退出代码等的指南: http://technet.microsoft.com/en-us/library/ms174997.aspx
关于sql - 从存储过程执行SQL Server代理作业并返回作业结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12249056/