级联优先约束SSIS

时间:2016-09-23 09:28:24

标签: sql-server sql-server-2008 ssis constraints operator-precedence

我有一个关于如何在SSIS中设置优先约束的问题。

我在包中有以下流程:

enter image description here

  • 执行SQL任务以此格式返回字符串值' 1111'然后将其存储在名为" data"
  • 的变量中
  • 重点是控制执行哪些脚本任务 例如,如果值为" 1111"然后所有4个脚本都可以运行。 如果值为" 1011"然后脚本1,3,4开始运行......你得到了图片
  • 在所有情况下,脚本都依赖于前一个脚本。
  • 约束使用如下表达式进行评估:SUBSTRING(@ [User :: data],2,1)==" 1"例如,对于脚本2。

问题: 如果其中一个脚本没有运行,那么下一个脚本也不会(因为约束永远不会得到评估)。例如,对于data =" 1011",脚本3和4永远不会运行,因为数字2从未运行...

你知道更好的方法吗?

将SQL Server 2008与BIDS一起使用

2 个答案:

答案 0 :(得分:2)

enter image description here

我同意@Iamdave的指示,即在每个脚本中修改脚本是否应该执行检查,而不是使用表达式约束。

但是,因为有人可能想要使用数据流任务执行此操作,或者这里有一些方法可以使用SSIS组件。您的问题是您希望有条件地执行任务,但无论该任务是否被执行,您都希望有条件地执行另一个任务。通过将每个脚本任务放在序列容器中,序列容器之间的优先级将始终使另一个容器执行,只要前一个容器没有失败或没有表达式作为约束。但是一旦进入容器,您需要能够设置条件优先级。您可以通过在脚本任务之前添加某种虚拟任务并在该优先级上添加约束来实现此目的。

答案 1 :(得分:0)

在脚本中添加一些条件代码。

例如,在脚本任务1的开头:

if firstcharacter(Variable) = 1
    do things
else
    do nothing

然后在脚本任务2中:

if secondcharacter(Variable) = 1
    do things
else
    do nothing

并确保所有数据都通过,只有在符合变量中的正确字符时才进行转换。