SQL 服务器 - 通过 JobCall 执行作业 - 被认为是什么 'On Success'

SQL Server - Executing Jobs via JobCall - What is considered 'On Success'

我试图通过说

来了解执行作业之间的区别

EXEC spMyProc1 对比 EXEC msdb.dbo.sp_start_job N'Job - SpMyProc1'

一切都在 运行 虽然 SQl 服务器作业代理。
这是一个例子:

我有一个包含以下步骤的工作:
第 1 步:在命令框中它有 EXEC dbo.spJob1 -- 只需 运行 一个 SP

第 2 步:具有相同类型的命令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,所以'On Success'意味着SP已经成功完成。因此,只有在步骤 1 中的 SP 完成后,步骤 2 才会开始。

另一方面,当第 3 步开始时,'On Success' 这一步意味着只是开始其他作业。它不会等待这些作业中的 SP 完成。 Job3 和 Job4 启动后,作业代理将继续执行步骤 4。

这是正确的吗?

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

我正在使用 SQL 服务器 2005

感谢您的帮助。

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

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

由于第 1 步正在执行实际的 SP,'On Success' 表示 SP 已成功完成。因此,只有在步骤 1 中的 SP 完成后,步骤 2 才会开始。 另一方面,当第 3 步开始时,此步骤的 'On Success' 意味着仅开始其他作业。它不会等待这些作业中的 SP 完成。 Job3 和 Job4 启动后,作业代理将继续执行步骤 4。