如何在 X 分钟后终止 SQL 服务器代理作业?

问题描述

我有一个sql 代理下的 MS sql Server 上运行的作业。该作业基本上运行一个 dtsx 包,并且每 5 分钟运行一次。如果作业运行超过 4 分钟,是否有办法自动终止?通常,作业会在 3 秒内完成。

解决方法

以下方法可能会解决这个问题(我们的理解有点不同——我们有一个存储过程来评估作业是否预先运行然后执行 exec):您可以通过 a 获取所需作业的运行时间SQL查询:

WITH cte AS(
  SELECT sj.name,sja.start_execution_date,ROW_NUMBER() OVER (ORDER BY sja.start_execution_date DESC) AS rn
  FROM msdb.dbo.sysjobactivity AS sja
  INNER JOIN msdb.dbo.sysjobs AS sj ON sja.job_id = sj.job_id
  WHERE sja.start_execution_date IS NOT NULL
     AND sja.stop_execution_date IS NULL
     AND sj.name LIKE '%myJobName%'
)
SELECT DATEDIFF(SECOND,start_execution_date,GETDATE())/60. AS RunTimeMinutes
  FROM cte
  WHERE rn = 1

您可以将其加载到变量中。在下一步中,您可以执行以下操作:

IF @MyVar >= 4 THEN EXEC '[msdb].[dbo].[sp_stop_job] N' + char(39) + 'myJobName' + char(39)