我具有带有逻辑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任务上看到绿色的勾号,并且执行成功停止,而我希望它在一个或另一个分支上运行。
我在这里做错什么,以及如何基于表中的可用性检查实现自定义流程来运行软件包?
谢谢!
答案 0 :(得分:2)
问题在于导致SQL check File2
的两个先例约束。
默认行为是两个约束由逻辑AND
约束,也就是说,两者都必须为TRUE
才能执行下一个任务开始。但是,根据您的流程,您需要逻辑OR
,这意味着如果任一约束返回TRUE
,任务就会开始。
右键单击任一约束,然后在对话框底部更改默认值:
如图所示,这就是您所找到的。将选择更改为“逻辑或”后,约束将变为虚线,而不是现在的实线。
编辑(基于评论中的问题):
[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
。