如何循环使用多个文件并使用SSIS包处理它们?

时间:2009-03-23 15:43:10

标签: ssis

我们的情况是使用相同的SSIS包导入大量具有相同格式的文件。正在从.net程序集加载和执行包。目前正在为每个文件重新加载包。

我想在.net进程初始化期间加载一次包,然后为每个文件执行它,以节省为每个文件重新加载包的开销。这是一个安全的过程吗?

3 个答案:

答案 0 :(得分:2)

我了解您使用Foreach Loop Container找到了问题的答案。如果文件格式相同,我认为这是我认为最好的方法。我发布了以下示例,以便其他用户可以发现它很有用。

实现此目标的一种可能方法是在ForEach Loop container标签中使用Control Flow,然后在控制流任务中放置Data Flow task。我在下面的例子中解释了这个过程。此示例使用SQL Server后端作为目标,Excel 97-2003格式.xls作为源文件。请注意,Excel文件的格式应相同。

分步流程:

  1. 创建一个名为dbo.Location的表格,如屏幕截图# 1 所示。此示例将通过读取具有相同布局的三个不同Excel文件来填充此表。屏幕截图显示了包执行前的空表。

  2. 在路径c:\temp\中创建两个Excel文件,如屏幕截图# 2 - # 4 所示。请注意,两个Excel文件具有相同的布局但内容不同。

  3. 在SSIS包中,创建三个变量,如屏幕截图# 5 所示。变量FolderPath将包含Excel文件所在的路径; FileExtension将包含Excel文件扩展名(此处为 *。xls ),FilePath应配置为指向一个有效的Excel文件(仅限此文件)在初始配置Excel连接管理器期间。)

  4. 连接管理器中创建Excel connection,指向一个有效的Excel文件,如屏幕截图# 6 所示。

  5. 在指向SQL Server的连接管理器中创建OLE DB Connection

  6. 在SSIS包上,在ForEach循环容器中放置ForEach循环容器和数据流任务,如屏幕截图# 7 所示。

  7. 配置ForEach循环容器,如屏幕截图# 8 和# 9 所示。通过执行此操作,变量User::FilePath将包含位于c:\temp\文件夹中的完整路径Excel文件,并在FolderPath上配置变量FileExtensionCollection的帮助部分。

  8. 在数据流任务中,放置Excel source以读取Excel文件数据,并放置O LE DB destination以将数据插入SQL Server表 dbo.Location 。数据流任务应如屏幕截图# 10

  9. 所示
  10. 配置Excel来源,如屏幕截图# 11 和# 12 所示,以使用Excel连接读取数据。

  11. 配置OLE DB目标,如屏幕截图# 13 和# 14 所示,将数据插入SQL Server数据库表。

  12. 在连接管理器中的 Excel连接上,配置表达式ExcelFilePathServerName,如屏幕截图# 15 所示。

  13. 数据流任务的示例执行显示在屏幕截图# 16 中。

  14. 屏幕截图# 17 在程序包执行后显示表dbo.Location中的数据。请注意,它包含屏幕截图# 3 和# 4 中显示的Excel文件中的所有行。

  15. Data Flow task属性中,将DelayValidation设置为 True ,以便在打开包时SSIS不会抛出错误。

  16. 希望有所帮助。

    屏幕截图#1:

    1

    屏幕截图#2:

    2

    屏幕截图#3:

    3

    屏幕截图#4:

    4

    屏幕截图#5:

    5

    屏幕截图#6:

    6

    屏幕截图#7:

    7

    屏幕截图#8:

    8

    屏幕截图#9:

    9

    屏幕截图#10:

    10

    屏幕截图#11:

    11

    屏幕截图#12:

    12

    屏幕截图#13:

    13

    屏幕截图#14:

    14

    屏幕截图#15:

    15

    屏幕截图#16:

    16

    屏幕截图#17:

    17

    屏幕截图#18:

    18

答案 1 :(得分:1)

最后,我在包中使用了一个foreach循环来处理每个文件。这非常快!我还有很多东西可以学习SSIS!

答案 2 :(得分:0)

对我来说似乎是安全的。但是我会对这个过程运行一些受控测试,可能首先使用一个非常简单的SSIS包,然后是更复杂的一个。

我不能说我自己已经完成了这个确切的场景。