我们的情况是使用相同的SSIS包导入大量具有相同格式的文件。正在从.net程序集加载和执行包。目前正在为每个文件重新加载包。
我想在.net进程初始化期间加载一次包,然后为每个文件执行它,以节省为每个文件重新加载包的开销。这是一个安全的过程吗?
答案 0 :(得分:2)
我了解您使用Foreach Loop Container
找到了问题的答案。如果文件格式相同,我认为这是我认为最好的方法。我发布了以下示例,以便其他用户可以发现它很有用。
实现此目标的一种可能方法是在ForEach Loop container
标签中使用Control Flow
,然后在控制流任务中放置Data Flow task
。我在下面的例子中解释了这个过程。此示例使用SQL Server
后端作为目标,Excel 97-2003
格式.xls
作为源文件。请注意,Excel文件的格式应相同。
分步流程:
创建一个名为dbo.Location
的表格,如屏幕截图# 1 所示。此示例将通过读取具有相同布局的三个不同Excel文件来填充此表。屏幕截图显示了包执行前的空表。
在路径c:\temp\
中创建两个Excel文件,如屏幕截图# 2 - # 4 所示。请注意,两个Excel文件具有相同的布局但内容不同。
在SSIS包中,创建三个变量,如屏幕截图# 5 所示。变量FolderPath
将包含Excel文件所在的路径; FileExtension
将包含Excel文件扩展名(此处为 *。xls ),FilePath
应配置为指向一个有效的Excel文件(仅限此文件)在初始配置Excel连接管理器期间。)
在连接管理器中创建Excel connection
,指向一个有效的Excel文件,如屏幕截图# 6 所示。
在指向SQL Server的连接管理器中创建OLE DB Connection
。
在SSIS包上,在ForEach循环容器中放置ForEach循环容器和数据流任务,如屏幕截图# 7 所示。
配置ForEach循环容器,如屏幕截图# 8 和# 9 所示。通过执行此操作,变量User::FilePath
将包含位于c:\temp\
文件夹中的完整路径Excel文件,并在FolderPath
上配置变量FileExtension
和Collection
的帮助部分。
在数据流任务中,放置Excel source
以读取Excel文件数据,并放置O LE DB destination
以将数据插入SQL Server表 dbo.Location 。数据流任务应如屏幕截图# 10 。
配置Excel来源,如屏幕截图# 11 和# 12 所示,以使用Excel连接读取数据。
配置OLE DB目标,如屏幕截图# 13 和# 14 所示,将数据插入SQL Server数据库表。
在连接管理器中的 Excel连接上,配置表达式ExcelFilePath
和ServerName
,如屏幕截图# 15 所示。
数据流任务的示例执行显示在屏幕截图# 16 中。
屏幕截图# 17 在程序包执行后显示表dbo.Location中的数据。请注意,它包含屏幕截图# 3 和# 4 中显示的Excel文件中的所有行。
在Data Flow task
属性中,将DelayValidation
设置为 True ,以便在打开包时SSIS不会抛出错误。
希望有所帮助。
屏幕截图#1:
屏幕截图#2:
屏幕截图#3:
屏幕截图#4:
屏幕截图#5:
屏幕截图#6:
屏幕截图#7:
屏幕截图#8:
屏幕截图#9:
屏幕截图#10:
屏幕截图#11:
屏幕截图#12:
屏幕截图#13:
屏幕截图#14:
屏幕截图#15:
屏幕截图#16:
屏幕截图#17:
屏幕截图#18:
答案 1 :(得分:1)
最后,我在包中使用了一个foreach循环来处理每个文件。这非常快!我还有很多东西可以学习SSIS!
答案 2 :(得分:0)
对我来说似乎是安全的。但是我会对这个过程运行一些受控测试,可能首先使用一个非常简单的SSIS包,然后是更复杂的一个。
我不能说我自己已经完成了这个确切的场景。