我正在使用几个步骤在sql server中准备一份工作。
前三个步骤应该以'series'(同步,即不并行)运行,第四个应该触发另外三个存储过程并行运行(同时)。
调用3个存储过程:
P_ETL_KPI_Fac_DDelivery,
P_ETL_KPI_Fac_DShipment and
P_ETL_KPI_Fac_DOrder.
为此,我创建了另外三个名为
的存储过程P_ETL_KPI_Fac_DDelivery_Launch,
P_ETL_KPI_Fac_DShipment_Launch and
P_ETL_KPI_Fac_DOrder_Launch
其中我只是将查询执行存储过程;即在P_ETL_KPI_Fac_DDelivery_Launch
我放exec P_ETL_KPI_Fac_DDelivery
。
在作业的第4步,我把这段代码写成:
exec P_ETL_KPI_Fac_DDelivery_Launch
exec P_ETL_KPI_Fac_DShipment_Launch
exec P_ETL_KPI_Fac_DOrder_Launch
我不确定通过这样做,3个存储过程(P_ETL_KPI_Fac_DDelivery,P_ETL_KPI_Fac_DShipment和P_ETL_KPI_Fac_DOrder)将并行运行,因为P_ETL_KPI_Fac_DDelivery_Launch
将调用P_ETL_KPI_Fac_DDelivery
,然后当P_ETL_KPI_Fac_DDelivery
完成时,{ {1}}将会运行。
这是真的吗?如果是,是否有人可以建议在特定步骤(而不是最后一步)并行运行几个存储过程?
提前致谢
答案 0 :(得分:1)
您还可以在Powershell中使用ForEach -Parallel。下面的简单示例将在数据库中运行所有存储过程。
Workflow TestRunParallelExecute
{
$ServerName = "localhost"
$DatabaseName = "testrun"
$Procedure_Query = "select name from sys.procedures"
$Procedure_List = (Invoke-Sqlcmd -Server $ServerName -Database $DatabaseName -Query $Procedure_Query)
ForEach -Parallel ($Procedure in $Procedure_List.Name)
{
Invoke-Sqlcmd -Server $ServerName -Database $DatabaseName -Query $Procedure
}
}
TestRunParallelExecute
cls
摘自答案: