我们有一个每天晚上从远程 SQL Server 导入数据的工作,我称之为 Import-Job。大多数情况下,这项工作在大约 15 分钟内完成,一切都很好,但由于 VPN 连接相当不稳定,有时这项工作需要更多时间。
我们为这项工作指定了 1.5 小时的时间窗口,我们不能冒险让 Import-Job 超过这个窗口(其他工作和生产从某个时间点开始)。
我们在时间窗口结束时使用另一个执行以下 TSQL 语句的作业停止 Import-Job:
IF EXISTS (
SELECT 1
FROM msdb.dbo.sysjobs J
JOIN msdb.dbo.sysjobactivity A
ON A.job_id=J.job_id
WHERE J.name=N'Import-Job'
AND A.run_requested_date IS NOT NULL
AND A.stop_execution_date IS NULL
)
BEGIN
EXEC msdb.dbo.sp_stop_job
N'Import-Job';
PRINT 'The job was stopped.'
END
ELSE
BEGIN
PRINT 'The job is not running.'
END
这确实有效,但它每次都会尝试停止 Import-Job,即使 Import-Job 没有运行,也会导致 Job History 中出现错误:
QLServerAgent Error: Request to stop job Import-Job (from User ServiceUser) refused because the job is not currently running.
我在这个语句中遗漏了什么,我如何让这个 T-SQL 脚本工作,这样它就不会在 Import-Job 没有运行时尝试停止它?(我想摆脱错误)