SSIS Foreach循环容器动态文件名和路径,排除带有多个下划线的文件

Dev*_*ora 1 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
Run Code Online (Sandbox Code Playgroud)

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

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

MnM*_*MnM 5

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

创建2个变量

  1. 字符串类型的文件名
  2. Int32类型的TokenCount

Foreach循环容器

  1. 使用Foreach循环容器并设置集合-Foreach文件枚举器

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

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

在此处输入图片说明

  1. 映射检索到的文件名

在此处输入图片说明

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

  2. 接下来,放置一个Execute SQL Task并将其与Expression任务连接

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

    这使用了TOKENCOUNT函数-返回字符串(包含您的文件名)中包含由指定分隔符分隔的令牌(您的情况下为_)的令牌数(在您的情况下为FileName)

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

  3. 在优先约束编辑器中,提供以下约束选项

在此处输入图片说明

  1. 配置执行SQL任务

在此处输入图片说明

  1. 最后,它应该像这样

在此处输入图片说明

  1. 我将脚本任务放在Expression任务和Execute SQL任务之间以进行调试,如果您希望我使用它

在此处输入图片说明

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

    在此处输入图片说明

  2. 由于我们在表达式中给出了条件(令牌计数> 3),因此在运行包后,这些文件名将被加载到数据库中

在此处输入图片说明

希望这可以帮助。