【问题标题】:SQL Server - Executing Jobs via JobCall - What is considered 'On Success'SQL Server - 通过 JobCall 执行作业 - 什么被认为是“成功”
【发布时间】:2017-05-03 05:52:01
【问题描述】:

我试图通过说来了解执行作业之间的区别

EXEC spMyProc1EXEC msdb.dbo.sp_start_job N'Job - SpMyProc1'

一切都通过 SQl Server Job Agent 运行。
这是一个例子:

我有一份工作,步骤如下:
第 1 步:在命令框中有 EXEC dbo.spJob1 -- 只是运行一个 SP

第二步:同类型命令EXEC dbo.spJob2 -- spJob2依赖Job1完成

第 3 步:具有以下内容:

EXEC msdb.dbo.sp_start_job N'Job3'
EXEC msdb.dbo.sp_start_job N'Job4'

Job3 内部是 EXEC spJob3
Job4 里面是 EXEC spJob4

第 4 步 - 再次拥有 EXEC dbo.spJob5

我想确保每项工作在下一个工作开始之前完成

我的理解是,由于第 1 步正在执行一个实际的 SP,因此“成功”意味着该 SP 已成功完成。因此,Step1 中的 SP 完成后,Step 2 才会开始。

另一方面,当第 3 步开始时,这一步的“成功”意味着只是开始其他工作。它不会等待这些作业中的 SP 完成。 Job3 和 Job4 启动后,Job Agent 将进入第 4 步。

这是正确的吗?

其次,在第 3 步中,它会等待 Job3 完成,还是只是启动 Job Job3 并继续启动 spJob4 而不等待内部代码完成?

我正在使用 SQL Sever 2005

感谢您的帮助。

【问题讨论】:

    标签: sql sql-server sql-server-2008 stored-procedures jobs


    【解决方案1】:

    如果您在作业步骤中使用 EXEC spMyProc1,它将等待 SP 执行并完成,如果根据您的条件成功,它将转到下一步。如果您只使用 EXEC msdb.dbo.sp_start_job N' Job - SpMyProc1',它只会启动 Job-SPMyProc1 并进入下一步。它不会等到这个启动的作业中的 SP 完成。

    所以,你的理解是正确的:

    由于步骤 1 正在执行实际的 SP,“成功”意味着 SP 已成功完成。因此,只有在 Step1 中的 SP 完成后,Step 2 才会开始。 另一方面,当第 3 步开始时,这一步的“成功”意味着只是开始其他工作。它不会等待这些作业中的 SP 完成。 Job3 和 Job4 启动后,Job Agent 将进入第 4 步。

    【讨论】:

    • 作为后续问题。如果我我的 spJob5(第 4 步)取决于 spJob3 和 spJob4(在第 3 步内)完成。我可以对第 5 步做些什么来确保这一点?假设我无法更改第 3 步。
    • Step3 的 Jobs 需要多长时间才能完成
    猜你喜欢
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 2018-09-06
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    相关资源
    最近更新 更多