【发布时间】:2018-04-25 15:47:11
【问题描述】:
我有一个运行一系列存储过程的 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 行将使用这些数据将数据文件传递给我们的客户。我们在旧数据进入文件时遇到了一些问题。
当我运行这样的命令时,存储过程都是按顺序调用的(我假设的)还是它们可以并行运行?
我将第一个调用移到一个单独的步骤中。所以它会在第一步运行它,然后在第二步交付。最终测试会告诉我它是否有效,但我很好奇这些存储过程是否可以相互并行运行?如果是这样,那将解释我们的问题。
【问题讨论】:
-
创建一个普通表...在第一步,截断表,然后用数据填充它...接下来的 3 步使用正确的数据....结束痛苦跨度>
-
当我说临时表时,我指的是我删除并重新创建的表。但它是一个实际的表,而不是在 sproc 运行后不再存在的临时表。我打错了。
-
不要删除表...只是在第一步中截断表...另外,请确保在存储过程中使用适当的隔离级别,也许您会得到一些脏读数...如果您遇到幻读或脏读,将隔离设置为可序列化应该可以解决问题
标签: sql-server tsql sql-server-2017 sql-agent