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