SSIS Foreach循环容器动态文件名和路径,排除超过某个下划线的文件

时间:2016-06-04 11:11:12

标签: ssis

我有一个Foreach文件枚举器,它将从文件夹中读取pdf文件名并将文件名放入数据库。但是,我希望它排除读取文件名,该文件名包含少于3个下划线。

AAA_BBB_000004554_060420161906_S1234567H_M.pdf
AAA_BBB_000003345_060420161906_S9876543H_S.pdf
AAA_BBB_000008546_060420161906_S1234123H_V.pdf
AAA_BBB_201604.pdf  
etc

AAA_BBB_201604.pdf应该在循环中排除,因为文件名只有2个下划线。

我如何存档?我做了一些搜索,似乎使用表达式是关键,但我不知道该怎么做。请帮助,谢谢。

1 个答案:

答案 0 :(得分:5)

这可以使用表达式中的TOKENCOUNT函数来完成。

创建2个变量

  1. 字符串类型的文件名
  2. Int32类型的TokenCount
  3. Foreach循环容器

    1. 使用Foreach循环容器并设置Collection - Foreach文件 普查员

    2. 指定.pdf文件所在的文件夹位置

    3. 在文件下设置“.pdf *:选择单选按钮检索文件名 - 仅限名称

    4. enter image description here

      1. 映射检索到的文件名
      2. enter image description here

        1. 接下来,在Foreach循环容器中放入 Expression 任务并使用以下表达式

        2. 接下来,删除执行SQL任务并从表达式任务

          连接它

          @[User::TokenCount] = TOKENCOUNT( @[User::FileName] ,"_")

          这使用TOKENCOUNT函数 - 返回字符串中的标记数(在您的情况下为FileName),其中包含由指定分隔符分隔的标记(在您的情况下为“_”)

          将令牌计数分配给int变量 - @ [User :: TokenCount]

        3. 在Precedence constraint Editor中,提供以下Constraint Options

        4. enter image description here

          1. 配置执行SQL任务
          2. enter image description here

            1. 最后,它应该是这样的
            2. enter image description here

              1. 我将表达式任务和执行SQL任务之间的脚本任务用于调试目的,如果你想让我使用这个
              2. enter image description here

                1. 运行包 - 假设您要从此文件夹中加载这些文件名

                  enter image description here

                2. 因为,我们在表达式(Token count> 3)中给出了条件,在运行包之后,这些文件名将被加载到数据库中

                3. enter image description here

                  希望这有帮助。