【发布时间】:2011-05-31 16:23:59
【问题描述】:
如何从每次具有不同文件名的excel源文件将数据导入SSIS中的sql server表(示例excel文件名:abc123、123abc、ab123c等)
【问题讨论】:
如何从每次具有不同文件名的excel源文件将数据导入SSIS中的sql server表(示例excel文件名:abc123、123abc、ab123c等)
【问题讨论】:
实现此目的的一种可能方法是在Control Flow 选项卡中使用ForEach Loop container,然后在控制流任务中放置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 所示。
在连接管理器中创建一个OLE DB Connection,指向SQL Server。
在 SSIS 包上,将 ForEach 循环容器和数据流任务放置在 ForEach 循环容器中,如屏幕截图 #7 所示。
如屏幕截图 #8 和 #9 所示配置 ForEach 循环容器。通过这样做,变量 User::FilePath 将包含位于文件夹 c:\temp\ 中的完整路径 Excel 文件,并借助 Collection 部分中配置的变量 FolderPath 和 FileExtension。
在数据流任务中,放置 Excel source 以读取 Excel 文件数据,并放置 OLE DB destination 将数据插入 SQL Server 表 dbo.Location。数据流任务应如屏幕截图 #10 所示。
如屏幕截图 #11 和 #12 所示配置 Excel 源以使用 Excel 连接读取数据。
如屏幕截图 #13 和 #14 所示配置 OLE DB 目标,以将数据插入 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:
【讨论】: