0

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

我在包下列流程:

enter image description here

  • 执行SQL任务返回以这种格式“1111”,其然后被存储在被称为“数据”可变
  • 一个字符串值
  • 这一切的关键在于控制执行哪个脚本任务 例如,如果值为“1111”,则所有4个脚本都可以运行。 如果值是“1011”,那么脚本1,3,4就会运行...你得到的图片
  • 在所有情况下,脚本DEPEND都是前一个脚本。
  • 约束用以下表达式进行评估:例如,对于脚本2,SUBSTRING(@ [User :: data],2,1)==“1”。

问题: 如果其中一个脚本不运行,那么下一个脚本不会运行(因为约束永远不会被评估)。例如,对于data =“1011”,脚本3和脚本4永远不会运行,因为编号2从未运行过......

您是否知道更好的方法来完成此项工作?

在BIDS中使用SQL Server 2008

+0

这取决于您可以拥有多少个不同的值,但是您可以在'SQL任务'后面用'条件分割'来完成。如果这是不可能的,编辑你的脚本,当值1011到达脚本2时,它只是将它传递给脚本3而不进行任何转换。 – DenStudent

+0

@DenStudent条件拆分是一个“数据流”任务元素,而不是“控制流”。你有什么想法可以达到最终结果吗?我只有这4个脚本。 – dhuesca

回答

2

enter image description here

我@Iamdave同意他的方向说,修改每个脚本脚本做检查那里是否应该或不应该执行,而不是使用表达式的约束。

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

0

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

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

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

然后在脚本任务2:

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

,只是确保所有的数据通过,只是被改造如果变量中的正确字符被满足。

+0

由于OP使用脚本,我会认为这是最好的解决方法。但是,如果他的所有脚本任务实际上都有数据流任务,则这不起作用。 – Matt