SSIS中的状态/执行ID

SSIS中的状态/执行ID,ssis,Ssis,我对同一SSIS包的多次执行有问题。 我希望允许并行执行,每个并行执行处理一个子集的数据 到目前为止,我正在考虑使用一些状态变量,但我不知道在哪里存储它 一个选项是使用保持连接打开并使用临时表来协调任务负载。然而,诱惑会导致许多编译问题,并且它们不是可维护的 是否有其他方法来标识包或执行范围的当前执行id?到目前为止,我在SSI中还没有发现可以用于分区/隔离每次执行的状态(内存中或存储在其他位置)。因此,根据我上面的评论,您可以尝试此操作。我不知道这正是你想要的,但也许它能给你一个进一步的暗示

我对同一SSIS包的多次执行有问题。 我希望允许并行执行,每个并行执行处理一个子集的数据

到目前为止,我正在考虑使用一些状态变量,但我不知道在哪里存储它

一个选项是使用保持连接打开并使用临时表来协调任务负载。然而,诱惑会导致许多编译问题,并且它们不是可维护的


是否有其他方法来标识包或执行范围的当前执行id?到目前为止,我在SSI中还没有发现可以用于分区/隔离每次执行的状态(内存中或存储在其他位置)。

因此,根据我上面的评论,您可以尝试此操作。我不知道这正是你想要的,但也许它能给你一个进一步的暗示

我调用workflowid为1的示例。这就是我的意思,您可以更改SQL作业代理步骤,然后更改每个步骤上的参数,这样您就可以添加两个执行workflowid 1和workflowid 4的步骤。然后它将只运行约束为success的序列容器

创建包变量

创建您的包流

编辑SQL任务获取工作流ID 将Parametermapping添加到包变量中

将结果集放入名为WorkflowIDrun的局部变量中

设置优先级约束,以便只允许一个id通过 注意:您可以添加parentworkflowid,这样,如果需要相同的逻辑,您就可以在序列容器中改变流

使用workflowid 1运行包时的最终结果

在代理中创建新的SQL作业。添加所需步骤注意事项;我为workflowid 1和2创建了两个步骤。截断和删除

然后编辑步骤并用正确的值更正变量。这将是用于截断的workflowid 1和用于删除的workflowid 2 这当然也可能是因为你在做另一份工作,这取决于你的需要。

你可以用艰难的方式来做。设置workflowid包变量,然后通过设置优先级约束,针对ssis包中的每个不同流,确保每个容器只使用一个workflowid。然后,您可以通过具有不同workflowid的不同作业调用它,这些作业将流向您流程的不同方向。也许这是一个XY问题。在你的问题中,你不清楚为什么你有多个并发执行的问题。也许有一种完全不同的方法来解决您的实际问题。@TabAlleman我希望允许并行执行,同时减少锁定。也就是说,我希望包能够快速、频繁,并且相互独立。如果我能以某种方式分割执行,这将是一个最佳的解决方案。当然,正如plaidDK所建议的,我可以有多个包,每个包的副本都有一个变量,但它是不可维护的。您不需要包的副本。同一个包可以在多个实例中运行。如果发生了锁定,则锁定发生在表上,而不是包上。@Candide我不是说您应该有多个包。但是在一个包中有多个流,每个流都有不同的workflowid,然后您可以在sqljob代理中调用每个workflowid,从而可以并行执行您的包。我认为此站点上的映像部分已关闭。我只创建链接,它们是不可访问的。我们正在使用项目参数来替换连接字符串,但这是一种将参数用作执行ID的有趣方法。在我的例子中,工作流是相同的,每次我只需要在不同的上下文中执行它。因此,并行度取决于配置的SQL作业的数量。谢谢