在sql server

时间:2018-02-15 08:45:00

标签: sql-server jobs

我正在使用几个步骤在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}}将会运行。

这是真的吗?如果是,是否有人可以建议在特定步骤(而不是最后一步)并行运行几个存储过程?

提前致谢

1 个答案:

答案 0 :(得分:1)

您还可以在Powershell中使用ForEach -Parallel。下面的简单示例将在数据库中运行所有存储过程。

https://docs.microsoft.com/en-us/powershell/module/psworkflow/about/about_foreach-parallel?view=powershell-5.1

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

摘自答案:

https://dba.stackexchange.com/questions/223262/powershell-run-stored-procedures-in-parallel-in-database