我有一个相当简单的 SSIS 包,其中包含许多Data Flow
任务,每个任务都有多个表的数据流,如下所示:
我希望能够基于我使用Script Task
控制流操作的一些用户定义的变量值来执行这些数据流中的每一个。比如,如果一个变量(比如 BESTELLDRUCK)的值为true
,那么我想执行这个表的数据流(源转换目标任务),否则我想跳过这个表并继续到另一个表(例如 AKT_FEHLER)在相同的数据流任务中。
我怎样才能做到这一点?提前致谢。
我有一个相当简单的 SSIS 包,其中包含许多Data Flow
任务,每个任务都有多个表的数据流,如下所示:
我希望能够基于我使用Script Task
控制流操作的一些用户定义的变量值来执行这些数据流中的每一个。比如,如果一个变量(比如 BESTELLDRUCK)的值为true
,那么我想执行这个表的数据流(源转换目标任务),否则我想跳过这个表并继续到另一个表(例如 AKT_FEHLER)在相同的数据流任务中。
我怎样才能做到这一点?提前致谢。
您不能在Data Flow Task
. Control Flow
但是,您可以在选项卡上启用或禁用数据流任务。
这是在“控制流”选项卡上执行此操作的一种可能方法:
如果可能,将源 --> 目标转换移动到单个数据流任务。如下图所示。
假设您已经为每个流创建了变量,以根据某些条件启用或禁用数据流任务。对于这个例子,我硬编码了一些值。
根据变量动态启用或禁用数据流任务。单击数据流任务并按F4查看Properties
。在属性上,单击属性旁边的省略号Expressions
按钮。您将看到属性表达式编辑器。
选择Property
Disable 并使用Ellipsis按钮输入表达式!@[User::Enable_BESTELLDRUCK]
注意感叹号,因为变量声明为Enable但只有Disable
属性可用,您需要执行相反的操作。
使用适当的变量对其他数据流任务重复该过程。运行包,您会注意到第二个数据流任务没有执行,因为变量Enable_AKT_FEHLER
设置为 value False
。
希望有帮助。
要在 ForEach Loop 容器中加载具有相同架构的多个表,请查看以下 SO 答案。它将数据从 MS Access 传输到 SQL Server。希望这能给你一个想法。
我想这里有足够的指针可以让 Agent 007 解决这个问题。我想补充几点一般性意见。
动态启用/禁用任务不是一个好习惯。禁用任务的更好方法是在优先约束中使用表达式。一个这样的参考:http ://www.sqlis.com/sqlis/post/Disabling-tasks-Through-Expressions.aspx
正如建议的那样,将每个 STD(源-转换-目标)转换为自己的 DFT。更好地使用父子模式。这将有助于测试未来添加的更多 DFT。