我有一个在SSIS中构建的进程,它循环遍历Excel文件,并仅从包含名称Report的那些文件中导入数据。
我用作表达式的UserVariable是:*Report*.xlsx
,它的工作原理非常好。现在我正在尝试构建类似的循环,但仅适用于不包含文件名中的报告的文件。
像*<>Report*.xlsx
之类的东西
可能吗?
感谢帮助!
马特
不幸的是,你无法使用SSIS表达式(类似于*[^...]*.xlsx
)来实现这一点,你必须搜索一些变通方法:
解决方法
第一
在进入循环之前使用Execute Script Task
获取 - 过滤 - 文件列表然后使用ForEach循环容器循环(Ado枚举器)
User::FilesList
的SSIS变量(例如:System.Object
)(范围:包)Execute Script Task
User::FilesList
变量作为源游戏内截图
Public Sub Main()
Dim lstFiles As New List(Of String)
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
FilesList
第二
Expression Task
类型的变量(名称:ExcludeFile)Report
组件System.Boolean
Expression Task
@[User::ExcludeFile] = (FINDSTRING(@[User::XlsxFile], "Report", 1 ) == 0)
注意:没有必要使用@[User::ExcludeFile] == False
来验证这一点,您可以使用Dummy DataFlowTask或脚本任务来检查文件名是否包含您要排除的关键字