基于变量值的SSIS优先约束流

时间:2019-11-18 15:07:42

标签: visual-studio ssis

我具有带有逻辑SQL的SSIS,它检查文件的记录是否存在于FileList表中,然后执行该记录。程序包中有INT32计数变量。

执行SQL任务包含 SQL语句:SELECT COUNT(*) AS [count] FROM dbo.FileList WHERE [file] LIKE '%File1%'

参数映射:User :: count输出方向,BYTE数据类型,0参数名称和-1参数大小。

结果集:计数,用户::计数

如果文件存在或下一次SQL检查(请参见屏幕截图),则SQL检查任务与后续数据流任务相关联。

优先约束具有价值:成功表达:@[User::count]>0

另一个优先约束具有价值:成功表达:@[User::count]==0

我想触发验证,因为表中没有要导入的File1,也没有%File1%记录。

当前执行时,我在Execute SQL任务上看到绿色的勾号,并且执行成功停止,而我希望它在一个或另一个分支上运行。

Finished Successfully

我在这里做错什么,以及如何基于表中的可用性检查实现自定义流程来运行软件包?

谢谢!

1 个答案:

答案 0 :(得分:2)

问题在于导致SQL check File2的两个先例约束。

默认行为是两个约束由逻辑AND约束,也就是说,两者都必须为TRUE才能执行下一个任务开始。但是,根据您的流程,您需要逻辑OR,这意味着如果任一约束返回TRUE,任务就会开始。

右键单击任一约束,然后在对话框底部更改默认值:

Screenshot of part of the precedent constraint configurations

如图所示,这就是您所找到的。将选择更改为“逻辑或”后,约束将变为虚线,而不是现在的实线。

编辑(基于评论中的问题):

  

[O]由于我将File1添加到文件夹中并在数据库中添加了File1记录,所以我仍然看到从未启动Load File1任务。它总是去SQL Check File2分支。基础查询返回值1。变量设置是否有问题?

当我需要将计数传递给变量而不是使用输出参数时,我使用Result Set。在General的{​​{1}}标签上,将Execute SQL Task设置为Result Set。在编辑器的Single Row选项卡上,将Result Set设置为Result Name,然后从0列表中选择要将结果映射到的变量。

那应该确保Variable Name变量正在从查询中获取@count,并且应该更正流程以调用1