SQL 服务器代理命令 window 运行 中的多个存储过程调用是并行的还是顺序的?

Are multiple stored procedure calls in SQL Server Agent command window run in parallel or sequentially?

我有一个 SQL 服务器代理作业,它 运行 是一系列存储过程。它是一个单步作业,在包的命令 window 中显示如下:

exec fb_GetDateSource '6A0DA1EB-D349-4D97-AAFC-822343D8EB49'

exec fb_DeliverFile '2344EC77-0D34-44A9-8A10-E5FEA1F6F218'
exec fb_DeliverFile '0BF456B8-24E5-4B0E-8FDA-F31C2D397B3A'
exec fb_DeliverFile 'C42EA4AA-3179-4344-BE24-5CEBA435F4FD'

所以第一行将一堆数据收集到一个临时文件中 table 然后接下来的 3 行将使用这些数据将数据文件传送给我们的客户。我们在旧数据进入文件时遇到了一些问题。

当我 运行 这样的命令时,所有存储过程都是按顺序调用的(我假设的)或者它们可以 运行 并行调用吗?

我将第一个调用移到一个单独的步骤中。所以它会在第一步 运行 它然后在第二步交付。最终测试会告诉我它是否有效,但我很好奇这些存储过程是否可以 运行 彼此并行?如果是这样的话,那就可以解释我们的问题了。

在您的代码中:

exec fb_GetDateSource '6A0DA1EB-D349-4D97-AAFC-822343D8EB49';

exec fb_DeliverFile '2344EC77-0D34-44A9-8A10-E5FEA1F6F218';
exec fb_DeliverFile '0BF456B8-24E5-4B0E-8FDA-F31C2D397B3A';
exec fb_DeliverFile 'C42EA4AA-3179-4344-BE24-5CEBA435F4FD';

存储过程是串行执行的(一个接一个)。如果你想要并行性,你可以通过创建多个作业并从主作业启动它们来实现它。

主程序:sp_start_job 将启动作业并return 控制主程序。

EXEC msdb.dbo.sp_start_job @job_name=@MyJobName; -- job name 1
EXEC msdb.dbo.sp_start_job @job_name=@MyJobName; -- job name 2
EXEC msdb.dbo.sp_start_job @job_name=@MyJobName; -- job name 3
EXEC msdb.dbo.sp_start_job @job_name=@MyJobName; -- job name 4

或者,您可以通过 SQL Server Agent 使用 Parallel Task 和 运行 创建 SSIS 包。