【问题标题】:SSIS Foreach Loop - Excel Sheets - 'xlnm#_FilterDatabase' (phantom / ghost sheet)SSIS Foreach 循环 - Excel 工作表 - 'xlnm#_FilterDatabase'(幻像/幽灵工作表)
【发布时间】:2018-10-12 00:48:02
【问题描述】:

按照 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

Foreach 循环设置:

变量

  • 变量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 EnumeratorSet Restrictions 限制

我认为Set Restrictions 选项可以使用诸如!=*_FilterDatabase* 之类的表达式来解决问题(排除幻像表),但根据flylib 在线的电子书摘录,通配符不是一个选项......

ADO.NET Schema Rowset Enumerator 提供了一种方法来枚举 数据源的架构。例如,您可以枚举表 数据库、服务器上的目录或表的列。对于每个 架构,您可以通过多种方式过滤结果。图 13.13 显示 Foreach ADO.NET Schema Rowset Enumerator Editor 和 已选择目录架构。

无法为限制指定通配符。

参考:Microsoft SQL Server 2005 Integration Services: Stock Foreach Enumerators

  • 图 13.13。 Foreach ADO.NET Schema Rowset Enumerator 提供了一种枚举数据库模式的方法。
  • 图 13.14 显示了 Tables Schema Restrictions 对话框 表架构。

更新:循环调试值

为了调试循环中的工作表对象,我终于找到了一种方法来停止循环并显示工作表名称。我在 Pragmatic Works 博客文章中找到了一篇文章,其中展示了如何使用 Script TaskBreak PointWatch Window 来显示该活动循环值——Looping through resultset with foreach loop


这些是建议的 SO 问题...

【问题讨论】:

标签: sql-server excel for-loop ssis


【解决方案1】:

我已经解决了这个要求,我很震惊它竟然相当简单。我很高兴在这里与您分享。

我在原始问题中使用Foreach ADO.NET Schema Rowset Enumerator 配置引用的MSSQLTips blog post 中的所有配置仍在使用中。我添加了一点点逻辑......

步骤:跳过工作表名称的逻辑

  1. 变量(布尔值) - FINDSTRING
  2. 数据流任务(属性> 表达式> 禁用)
    • 当数据流任务是无效工作表时,我们想停止它。为此...
    • 左键单击“数据流”任务,转到“属性”窗格,在“表达式”部分选择椭圆图标(“...”)并选择 'Disable' 属性和表达式只需添加变量 在上一步“@[User::varIsInvalidSheet_DisableTask]”中创建
  3. 运行调试器验证设置是否生效
    • 已找到所有工作表,但虚拟工作表具有 Disable TRUE 属性,并且该任务被忽略。

以下是这些步骤的一些屏幕截图

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 2019-01-31
    • 1970-01-01
    相关资源
    最近更新 更多