gpt4 book ai didi

sql - 从存储过程执行SQL Server代理作业并返回作业结果

转载 作者:行者123 更新时间:2023-12-02 01:13:39 26 4
gpt4 key购买 nike

需要有一个存储过程来调用 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命令的人来说,这可能会有所帮助。我在这里找到了解决方案的起点:

http://social.msdn.microsoft.com/Forums/en-US/89659729-fea8-4df0-8057-79e0a437b658/dynamically-checking-job-status-with-tsql

这依赖于这样一个事实: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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com