SSIS:如果条件满足则执行第一个任务否则跳到下一个

Dav*_*vid 9 sql-server ssis

我开始了解SSIS,如果问题太简单,我道歉.

foreach-loop- container中有一组任务.
一个任务只需要某个用户变量不为null或为空的情况下执行.
否则,流程应跳过第一个任务并继续到第二个任务.

如何实现这一点(详细)?

小智 15

问题1:有两种方法可以解释您的逻辑:"......某个用户变量不为空或空":

  1. (变量不为空)或(变量为空).
  2. (变量不为空)或(变量不为空).

    这完全是关于"不"这个词的对象(s?).差异很微妙,但会在Foreach循环中的第一个任务执行时产生影响.出于演示目的,我假设您打算#1.

    问题2:第一项任务不再是第一项任务.为了在BIDS环境中使用SSIS实现您的期望,您需要在先前称为"第一个任务"的任务之前放置另一个任务.这样您就可以在新的第一个任务中为前一个任务设置优先约束.通过从托管代码动态设计SSIS,可以实现您的需求,但我认为这个问题不能保证与该设计选择相关的开销.我喜欢使用一个空的Sequence Container作为"Anchor"任务 - 一个仅作为Precedence Constraint的起始端点存在的任务.我大量记录它们.我不希望任何人删除"不必要的空容器",漫游大厅几天摇头,重复"安迪,安迪,安迪......"但我离题了.

    在下面的示例中,我有两个优先约束,留下空的Sequence Container.一个是可以跳过的任务,另一个是有时可以跳过的任务之后的任务.在有时可以跳过的任务和后续任务之间需要第三个优先约束.请务必注意,必须编辑第三个优先约束,并将Multiple Constraints选项设置为OR.这允许在执行任何互斥的先前路径时执行后续任务.默认情况下,它设置为AND,并且需要两个路径才能执行.根据定义,不会- 可能不-的发生是相互排斥的路径.

    我测试名为@MyVar的SSIS String变量的值,看它是否为Null或Empty.我使用仅表达式评估选项来保留空序列容器的约束.表达式各不相同,但建立了表达式的互斥性.我的Foreach循环容器看起来像这样:

SSIS图

我希望这有帮助.

:{>


Dib*_*bin 10

最好的方法是在表达式中使用'Disable Property'并根据条件给出表达式.只需搜索如何使用禁用属性.


Dav*_*ton 6

如何使用简单的解决方案而不是已经给出的一些更复杂的解决方案.对于要有条件跳过的任务,请将表达式添加到disabled属性.产生true或false结果的任何表达式都可以使用,因此对于问题示例,您可以使用:

ISNULL(@[User::MY_VAR]) || @[User::MY_VAR]==""
Run Code Online (Sandbox Code Playgroud)

唯一的缺点是,它可能不像其他一些解决方案那样可见,但实施起来要容易得多.