按照MSSQLTips博客文章中的说明进行操作,我具有带有Foreach循环的安装程序包,以遍历工作簿中的所有工作表并将数据导入表中。
循环将找到正确的工作表( '11-18$'
),然后是具有更长名称的同一工作表( '11-18$'_xlnm#_FilterDatabase
)。多余的工作表导致data duplication
和错误消息,例如"Derived Column.Outputs[Derived Column Output].Columns[SourceSheet]" specifies failure on truncation
。
如何使循环排除“ xlnm#_FilterDatabase”对象?
为什么循环复制工作表数据?
MSSQLTips博客文章-Read Data From Multiple Excel Worksheets SSIS
变量
- 变量为
Name:'Sheet Name'
,Scope:'Import_AXExtractAgristatsInventory'
(程序包名称),Date type:'String'
,Value:'11-18$'
Foreach循环编辑器
集合枚举器为
Foreach ADO.NET Schema Rowset Enumerator
连接提供商为
.Net Providers for OleDb\Microsoft Office 12.0 Access Database Engine OLE DB Provider
- 的路径
连接文件是
\\filepath\file.XLSX
连接高级扩展属性为
Excel 12.0
连接变量映射为
Variable:='User:SheetName'
,Index:='2'
连接字符串为
Data Source=C:\filepath\file.xlsx;Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;
更新:Foreach ADO.NET Schema Rowset Enumerator
和Set Restrictions
的限制
我认为Set Restrictions
选项可以通过!=*_FilterDatabase*
这样的表达式来解决问题(排除幻像表),但是根据flylib在线电子书摘录,通配符不是一个选项。 ..
ADO.NET架构行集枚举器提供了一种枚举 数据源的架构。例如,您可以列举表中的 数据库,服务器上的目录或表的列。对于每个 模式,您可以通过多种方式过滤结果。图13.13 显示了Foreach ADO.NET架构行集枚举器编辑器以及 已选择目录架构。
无法为限制指定通配符。
参考:Microsoft SQL Server 2005 Integration Services: Stock Foreach Enumerators
- 图13.13。 Foreach ADO.NET架构行集枚举器提供了一种枚举数据库架构的方法。
- 图13.14显示了该表的“表架构限制”对话框。 表架构。
更新:循环调试值
为了调试循环中的图纸对象,我终于找到了一种停止循环并显示图纸名称的方法。我在Pragmatic Works Blog Post上找到了一篇文章,该文章显示了如何使用Script Task
,Break Point
和Watch Window
来显示该活动循环值Looping through resultset with foreach loop。
这些都是建议的SO问题...
答案 0 :(得分:0)
我已经解决了这个要求,但震惊的是事实证明它相当简单。很高兴在这里与您分享。
我在原始问题中使用Foreach ADO.NET Schema Rowset Enumerator
引用的MSSQLTips blog post中的所有配置仍在使用中。我增加了一点逻辑...
STEPS:跳过工作表名称的逻辑
- 变量(布尔值)-FINDSTRING
- 设置一个名为
varIsInvalidSheet_DisableTask
的变量并将表达式设置为FINDSTRING(@[User::varSheetName] ,"FilterDatabase",1 ) > 0
- FINDSTRING (SSIS Expression): Microsoft Docs/ SSIS/ Expressions/
- 数据流任务(属性>表达式>禁用)
- 我们希望在数据表任务无效时停止它。为此...
- 左键单击“数据流”任务,转到“属性”窗格,在“表达式”部分中选择椭圆形图标('...'),然后选择 '
Disable
'属性,并为表达式添加变量 在上一步“@[User::varIsInvalidSheet_DisableTask]
”中创建- 运行调试器以确认设置生效
- 找到所有工作表,但幻影表具有Disable TRUE属性,并且任务被忽略。
以下是这些步骤的屏幕截图