首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSIS集合中的WildCards {不包括}名称xlsx

SSIS集合中的WildCards {不包括}名称xlsx
EN

Stack Overflow用户
提问于 2017-03-06 15:01:38
回答 2查看 2.2K关注 0票数 3

我有一个在SSIS中构建的进程,它循环遍历Excel文件,并只从包含名称报告的文件中导入数据。

我用作表达式的UserVariable是:*Report*.xlsx,它运行得非常好。现在,我试图构建类似的循环,但只用于文件名中不包含报表的文件。

有点像*<>Report*.xlsx

有可能吗?

谢谢你帮忙!

哑光

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-06 20:41:51

不幸的是,您不能使用SSIS表达式(类似于*[^...]*.xlsx)来实现这一点,您必须搜索一些解决方案:

解决方案

First

在进入循环和循环之前,使用Execute Script Task获取过滤过的文件列表,然后使用ForEach循环容器(Ado枚举器)

  1. 必须有一个SSIS变量(例如:User::FilesList__),它的类型是System.Object (Scope: Package)
  2. 在for每个循环容器之前添加一个Execute Script Task,并将User::FilesList添加为ReadWrite变量
  3. 在脚本中编写以下代码: 导入System.Linq导入System.IO Imports System.Collections.Generic lstFiles.AddRange(Directory.GetFiles("C:\Temp","*.xlsx",SearchOption.TopDirectoryOnly).Where(Function(x) Not x.Contains(“Report”).ToList) Dts.Variables.Item("FilesList").Value = lstFiles Dts.TaskResult = ScriptResults.Success End Sub
  4. 在For a循环容器中,选择Enumertaion类型为“From变量枚举器”,并选择FilesList变量作为源

ScreenShots

第二

在for循环中添加一个Expression Task以检查该文件是否包含Report字符串。

  1. 添加System.Boolean类型的变量(名称: ExcludeFile)
  2. 在ForEach循环容器中,在导入Excel的DataFlowTask之前添加一个DataFlowTask组件

  1. 在表达式任务中,编写以下内容: @User::ExcludeFile = (FINDSTRING(@User::XlsxFile,"Report",1) == 0)

  1. 双击表达式任务和DataFlowTask之间的连接器,然后编写以下表达式 @User::ExcludeFile == False

注意:没有必要使用Expression Task来验证这一点,您可以使用虚拟DataFlowTask脚本任务来检查文件名是否包含要排除的关键字。

票数 1
EN

Stack Overflow用户

发布于 2017-03-06 18:12:39

在循环中,将脚本任务放在第一个任务之前。用一条线连接这两条线。右键单击该行并将约束选项设置为表达式。你的表情会像这样..。

代码语言:javascript
复制
FINDSTRING(@var, "Report", 1) == 0

其中@var是可迭代的循环。

只有没有“报告”的文件才会进入下一步。

引用这个确切的答案。SSIS Exclude certain files in Foreach Loop Container

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42628842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档