在 ssis 控制流中选择性地执行任务

Posted

技术标签:

【中文标题】在 ssis 控制流中选择性地执行任务【英文标题】:selectively execute task in ssis control flow 【发布时间】:2011-02-17 17:47:24 【问题描述】:

我有一个 SSIS 包,其控制流包含一系列按顺序执行的 sql 任务。

我需要检查每个任务的标志,如果已设置则运行该任务,如果未设置则跳过并转到下一个。

这些任务中的每一个都执行一个存储过程。因此,如果未设置,我可以检查 proc 和“返回”。如果有的话,我正在寻找“SSIS”解决方案。

TIA

PS

【问题讨论】:

【参考方案1】:

我认为您的问题与我的问题相同,我想在控制流中控制“内联”任务的执行。

我发现的最简单的方法不涉及控制流对象之间的数据连接器上的表达式,而是使用控制对象本身的表达式并使用表达式设置“禁用”值。这种方式在执行时,对象要么被跳过,要么不基于表达式评估。

例如,我想根据名为“ExtractType”的变量是否等于“Full”来执行“执行 SQL 任务”来删除我的索引。如果是这样,那么我想在完全加载之前删除表上的索引。

【讨论】:

很好,我忘记了那里的表达方式。很容易忽略 SSIS 中所有可以使用表达式的地方。如果我可以进一步投票给您的答案,我会的。感谢您回答这个问题! 太棒了!我会试试的。谢谢虚拟机!【参考方案2】:

在您的控制流任务之间,单击箭头并选择编辑。当你这样做时,你会得到一个对话框,允许你检查任务的“约束”(成功、完成或失败),一个“表达式”(即你可以让你的执行 sql 任务返回一个值,将该值存储在一个变量,并检查表达式中该变量的值以确定是否继续沿您正在编辑的路径)、“表达式和约束”以及“表达式或约束”。除了逻辑之外,最后两个是相同的。 “表达式和约束”要求表达式和约束条件都为真,“表达式或约束”只要求表达式和约束之一的条件为真。

【讨论】:

我只有一条路。并且该路径中的步骤需要检查标志,如果未设置则转到路径中的步骤。 “约束”可能吗? 不,约束只检查其输入所连接的任务的执行状态。如果任务成功,则如果设置为成功,则约束测试将为真,如果任务失败,则如果设置为失败,则约束测试将为真,如果设置为完成,则只要任务完成,约束就为真。你想要表达。在您的存储过程中,将您的标志值作为输出返回。将该输出放入变量中。在您的路径中使用 Expression 并根据您的条件测试该变量。如果为 true,则路径将传递到流程的下一步。 第一个任务呢? @GeorgiG,在许多情况下,我认为 Amos Wood 的答案比我的要好。并用厘米对他说了同样的话。他的方法在您的情况下通常效果更好,尽管我看到人们包含不做任何事情的任务,只是为了在第一个实际任务之前使用约束。 @GeorgiG 只需添加一个虚拟任务,例如。 G。在第一个任务之前有一个空的序列容器,然后您就有一个可用于原始第一个任务(现在是第二个任务)的连接器。

以上是关于在 ssis 控制流中选择性地执行任务的主要内容,如果未能解决你的问题,请参考以下文章

SSIS 抱怨找不到目的地

SSIS 脚本任务引发的错误

如何在 SSIS 控制流任务中创建一个临时表,然后在数据流任务中使用它?

如何从数据库中检索 bigint 并将其放入 SSIS 中的 Int64

将执行 SQL 任务的结果保存到 Excel

SSIS,循环文本文件和决策