2017-10-10 42 views
1

对于同一个SSIS包的多次执行,我遇到了问题。 我想允许并行执行每个处理一个数据子集。SSIS中的状态/执行ID

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

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

是否有其他方法来标识包或执行范围的当前执行ID?在SSIS中,我没有发现任何状态(无论是在内存中还是存储在别处),我可以使用它来对每个执行进行分区/隔离。

+0

你可以做到这一点很难。创建一个workflowid包变量,然后针对ssis包中的每个不同流确保每个容器只使用一个工作流ID,方法是设置优先约束。然后,您可以通过不同的工作来调用它,并使用不同的工作流ID,这将在您的流程的不同方向上进行。 – plaidDK

+0

也许这是一个XY问题。在你的问题中不清楚为什么你有多个并发执行的问题。也许有一种完全不同的方式来解决你的实际问题。 –

+0

@TabAlleman我想允许并行执行并同时减少锁定。也就是说,我希望这些软件包能够快速,频繁且相互独立。如果我能以某种方式分割执行,它将是一个最佳解决方案。当然,我可以有多个包,每个其他变量的副本,正如plaidDK所建议的,但它不可维护。 – Candide

回答

1

所以根据我上面的评论,你可以试试这个。我不知道这是你想要的东西,但也许它可以让你有进一步的暗示。

我正在用workflowid 1调用这个例子。这就是我的意思是您可以在您的SQL Job代理步骤中更改,然后更改每个步骤的参数,因此fx您可以添加执行workflowid 1和workflowid 4的2个步骤然后它将只运行那个约束成功的序列容器。

创建一个包变量 Create Package Parameter

创建你的包流 Create Package with local variable

编辑您的SQL任务获取WorkflowID Setup SQL Task to get workflowID 添加Parametermapping到您的包变量

setup Parameter Mapping

获取结果集到本地变量称为WorkflowIDrun Setup Resultset

让你的优先约束,因此只允许一个ID通过 注意:您可以添加parentworkflowid的,这样就可以如果您需要某些相同的逻辑,则会在序列容器内分散您的流程 Edit your precedence constraints

最终结果时,包与workflowid 1 Package run with workflowid 1

创建您的代理一个新的SQL作业运行。添加所需的步骤通知;我创建了workflowid 1和2截断两步并删除

SQL Job setup

然后我修改我的步骤和纠正与正确值的变量。这将是截断工作流程1和删除工作流程2的工作流程 这可能也是您做其他工作的原因,这取决于您的需求。 Step setup with correct workflowID

+0

我认为这个网站上的图像部分是atm。我只创建链接,但无法访问。 – plaidDK

+0

我们使用项目参数来替换连接字符串,但这是一个使用参数作为执行ID的有趣方法。就我而言,工作流程是一样的,我只需要每次在不同的环境下执行它。所以并行度取决于配置的SQL作业数量。谢谢! – Candide