我希望有人可以就我在使用SSIS序列容器时遇到的问题提出另外几点观点。我对序列容器相对较新,他们正在完成需要完成的工作,但是情况就是这样:让我们假设我有三个序列容器,它们都处理文件。容器A,B和C.容器A将始终处理,因为它解压缩文件,但容器B可能不会根据文件是否存在而执行操作,并且与容器C相同。所有容器都包含其他可正常工作的任务。我尝试通过使用表达式评估文件名来在容器之间使用约束,但这似乎不起作用。我不确定答案是将脚本任务放在序列容器中的数据流任务中以查看文件名,然后说,如果文件存在,则处理它,如果没有,继续。
任何帮助将不胜感激。非常感谢。
答案 0 :(得分:3)
如果我理解你的问题。序列容器A始终运行,因为它正在查找下游容器所依赖的.zip文件。如果父级不满足某些条件(找到要解压缩的档案),则希望禁用依赖项。
最快/无代码的方法是将两个Sequence Containers包装在Foreach循环容器中。这将触发,找不到要处理的文件,也永远不会调用内部容器。
脚本任务是一个控制流元素,很好用,你可以启用/禁用容器或启用/禁用优先约束。
根据您的业务需求,任何一种都可以是正确的方法。
根据下面的评论,我可能会将我的包格式化为此。 Sequence容器封装了数据可用时需要发生的所有事情。序列容器很容易检查我的文件在那里。这确实假设一个简单的文件存在检查就足够了。如果需要文件A和Z,则脚本任务将更容易。
配置ForEach循环容器。我通常使用Enumerator部分下的表达式(并根据变量而不是显示的硬编码值进行分配),因为这样可以让我获得最大的灵活性。