6

我有一个相当简单的 SSIS 包,其中包含许多Data Flow任务,每个任务都有多个表的数据流,如下所示:在此处输入图像描述

我希望能够基于我使用Script Task控制流操作的一些用户定义的变量值来执行这些数据流中的每一个。比如,如果一个变量(比如 BESTELLDRUCK)的值为true,那么我想执行这个表的数据流(源转换目标任务),否则我想跳过这个表并继续到另一个表(例如 AKT_FEHLER)在相同的数据流任务中。

我怎样才能做到这一点?提前致谢。

4

2 回答 2

16

不能Data Flow Task. Control Flow但是,您可以在选项卡上启用或禁用数据流任务。

这是在“控制流”选项卡上执行此操作的一种可能方法:

如果可能,将源 --> 目标转换移动到单个数据流任务。如下图所示。

控制流

假设您已经为每个流创建了变量,以根据某些条件启用或禁用数据流任务。对于这个例子,我硬编码了一些值。

变量

根据变量动态启用或禁用数据流任务。单击数据流任务并按F4查看Properties。在属性上,单击属性旁边的省略号Expressions按钮。您将看到属性表达式编辑器。

选择PropertyDisable 并使用Ellipsis按钮输入表达式!@[User::Enable_BESTELLDRUCK]注意感叹号,因为变量声明为Enable但只有Disable属性可用,您需要执行相反的操作。

属性表达式编辑器

使用适当的变量对其他数据流任务重复该过程。运行包,您会注意到第二个数据流任务没有执行,因为变量Enable_AKT_FEHLER设置为 value False

希望有帮助。

执行

参考:

要在 ForEach Loop 容器中加载具有相同架构的多个表,请查看以下 SO 答案。它将数据从 MS Access 传输到 SQL Server。希望这能给你一个想法。

如何以编程方式获取 SSIS 包中的 MS Access 表列表?

于 2013-02-05T14:28:46.143 回答
1

我想这里有足够的指针可以让 Agent 007 解决这个问题。我想补充几点一般性意见。

  1. 动态启用/禁用任务不是一个好习惯。禁用任务的更好方法是在优先约束中使用表达式。一个这样的参考:http ://www.sqlis.com/sqlis/post/Disabling-tasks-Through-Expressions.aspx

  2. 正如建议的那样,将每个 STD(源-转换-目标)转换为自己的 DFT。更好地使用父子模式。这将有助于测试未来添加的更多 DFT。

于 2013-02-06T02:07:51.153 回答