Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server代理命令窗口中的多个存储过程调用是并行运行还是顺序运行?_Sql Server_Tsql_Sql Server 2017_Sql Agent - Fatal编程技术网

Sql server SQL Server代理命令窗口中的多个存储过程调用是并行运行还是顺序运行?

Sql server SQL Server代理命令窗口中的多个存储过程调用是并行运行还是顺序运行?,sql-server,tsql,sql-server-2017,sql-agent,Sql Server,Tsql,Sql Server 2017,Sql Agent,我有一个SQL Server代理作业,它运行一系列存储过程。这是一个单步作业,在程序包的命令窗口中显示以下内容: 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_Deliv

我有一个SQL Server代理作业,它运行一系列存储过程。这是一个单步作业,在程序包的命令窗口中显示以下内容:

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'
因此,第一行将一组数据收集到一个临时表中,然后接下来的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';
存储过程是串行执行的(一个接一个)。如果您想要并行性,可以通过创建多个作业并从主作业启动它们来实现

主作业:将启动作业并将控制返回主程序

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

或者,您可以使用
并行任务创建SSIS包
,并通过SQL Server代理运行此包。

创建一个普通表…在第一步,截断表,然后用数据填充它…接下来的3个步骤使用正确的数据…结束痛苦当我说临时表时,我指的是一个我删除并重新创建的表。但它是一个实际的表,而不是在存储过程运行后不再存在的临时表。我输入错误。不要删除表…只需在第一步截断表…另外,确保在存储过程中使用适当的隔离级别,可能您正在获取一些脏读数…将隔离设置为可序列化应该可以解决问题,如果您获取幻影或脏读,我绝对不希望并行,我正在努力避免它。我只是想确定它们是连续运行的。这回答了我的问题,谢谢。