【问题标题】:SSIS Foreach loop through text files with "crosswlk" in the nameSSIS Foreach 循环遍历名称中带有“crosswlk”的文本文件
【发布时间】:2018-09-02 16:50:47
【问题描述】:

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

我在 Google 上搜索了一堆,大多数解决方案都说在脚本任务中执行一些 C# 来完成此任务。似乎我应该能够在 Foreach 容器中执行此操作,也许在带有表达式的集合区域中。但是我在属性表达式编辑器中找不到有关各种属性的任何信息时遇到了麻烦。 Name、FileSpecFileNameRetrieval 属性有什么区别?

我想我可以这样做:

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

对我来说,这意味着只处理文件名中包含 crosswlk 的文件。但这行不通。我确实注意到单词 crosswlk 总是从文件名中的第 13 个字符开始,所以我尝试使用子字符串,但也没有运气。

有没有办法以这种(或另一种)方式过滤文件名,或者使用 C# 是唯一的方法?非常感谢!

【问题讨论】:

    标签: sql-server ssis ssis-2014


    【解决方案1】:

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

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

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

    更多详情请看这里:https://docs.microsoft.com/en-us/sql/integration-services/control-flow/foreach-loop-container#enumerator-dynamic-options

    【讨论】:

    • 我认为这行不通,因为您不能在 Windows 资源管理器中这样做。非常感谢!!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-24
      • 2019-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多