SSIS Foreach使用" crosswlk"循环浏览文本文件。在名字里

时间:2018-03-23 22:54:44

标签: sql-server ssis ssis-2014

在我的Foreach循环中,我只想处理文件名中包含 crosswlk 的文件。不幸的是,这是在文件名的中间,我不能 crosswlk.pgp

我已经谷歌搜索了这一堆,大多数解决方案都说要在脚本任务中做一些C#来实现这一目标。看起来我应该可以在Foreach容器中执行此操作,也可以在带有表达式的Collection区域中执行此操作。但是我在“属性表达式编辑器”中找到有关各种属性的任何信息时遇到了麻烦。名称,FileSpecFileNameRetrieval属性之间的区别是什么?

我以为我可以做类似的事情:

Property: Name
Expression: `FINDSTRING(@[User::SourceFilename],"crosswlk",1) > 0`

对我而言,只说文件名中包含 crosswlk 的文件。但那不起作用。我注意到 crosswlk 这个词总是从文件名中的第13个字符开始,所以我尝试使用子字符串,但也没有运气。

有没有办法过滤这个(或其他)方式的文件名,或者只使用C#?非常感谢!

2 个答案:

答案 0 :(得分:1)

根据文档,您应该能够在“文件”字段中使用通配符。

  

使用通配符(*)指定要包含在的文件中   采集。例如,要包含名称包含的文件   “abc”,使用以下过滤器:* abc *。

所以,你应该能够使用这样的东西:*crosswlk*

有关详情,请参阅此处:https://docs.microsoft.com/en-us/sql/integration-services/control-flow/foreach-loop-container#enumerator-dynamic-options

答案 1 :(得分:0)

如果制作可用的通配符太难,那么可能有用的一个选项是使用FOREACH ADO枚举器。首先你要#34;填写"记录集对象变量,包含您想要的所有文件名,然后您可以循环使用它。 您可以通过脚本任务填充记录集对象,并使用C#system.IO来查询文件系统。  如果您需要严格控制处理的文件(例如,防止加载测试文件),这是一种方便的方法。