SSIS Foreach循环-Excel表格-'xlnm#_FilterDatabase'(幻影/幻影表)

时间:2018-10-10 16:18:18

标签: sql-server excel for-loop ssis

按照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架构行集枚举器提供了一种枚举   数据源的架构。例如,您可以列举表中的   数据库,服务器上的目录或表的列。对于每个   模式,您可以通过多种方式过滤结果。图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 TaskBreak PointWatch Window来显示该活动循环值Looping through resultset with foreach loop

enter image description here


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

1 个答案:

答案 0 :(得分:0)

我已经解决了这个要求,但震惊的是事实证明它相当简单。很高兴在这里与您分享。

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

STEPS:跳过工作表名称的逻辑

  
      
  1. 变量(布尔值)-FINDSTRING      
  2.   
  3. 数据流任务(属性>表达式>禁用)      
        
    • 我们希望在数据表任务无效时停止它。为此...
    •   
    • 左键单击“数据流”任务,转到“属性”窗格,在“表达式”部分中选择椭圆形图标('...'),然后选择   'Disable'属性,并为表达式添加变量   在上一步“ @[User::varIsInvalidSheet_DisableTask]”中创建
    •   
  4.   
  5. 运行调试器以确认设置生效      
        
    • 找到所有工作表,但幻影表具有Disable TRUE属性,并且任务被忽略。
    •   
  6.   

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

ssis_task-expression-disable

ssis_debug-loop-sheet-objects