如何在数据流中使用if..else基于SSIS中的用户变量值

时间:2013-02-05 14:11:28

标签: sql sql-server sql-server-2008 ssis

我有一个相当简单的SSIS包,其中包含许多Data Flow个任务,每个任务都有多个表的数据流,如下所示:enter image description here

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

我该怎么做?提前谢谢。

2 个答案:

答案 0 :(得分:15)

无法禁用或启用Data Flow Task内的转换。但是,您可以在Control Flow选项卡上启用或禁用数据流任务。

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

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

Control Flow

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

Variables

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

选择Property停用并使用省略号按钮输入表达式 !@[User::Enable_BESTELLDRUCK] 注意感叹号,因为该变量已声明为< em>启用但只有Disable属性可供您使用。

Property Expression Editor

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

希望有所帮助。

Execution

参考:

要在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解决问题。我想补充一些一般性意见。

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

  2. 建议将每个STD(Source-Transform-Destination)转换为自己的DFT。甚至更好地使用父子模式。这有助于测试更多DFT的未来添加。