如何使用SQL Server Integration Services从多个Excel文件读取数据

问题

我有多个Excel文件中的数据,并且我所有的Excel文件都放在同一文件夹中。我想创建一个SQL Server集成服务(SSIS)程序包,该程序包可以从多个Excel文件读取数据并将数据加载到SQL Server目标表中。如何使用SSIS实现此目的?

本技巧说明了我们如何使用SSIS从多个Excel文件中读取数据并将数据加载到SQL Server目标表中。请按照以下所有步骤了解解决方案。

步骤1-建立资料夹

C:\ Drive 创建一个名为Excel_Exercise的文件夹,然后创建一个名为Excel_Source的子文件夹让我们在Excel_Source文件夹中创建三个excel文件请参考下图作为参考。

 

 

Excel源文件夹

我们将添加这三个Excel文件的数据,然后使用SSIS从所有这些Excel文件中读取数据。

第2步-示例文件

在上一步中,我已经创建了三个空的Excel源文件。让我们将数据添加到每个Excel文件的sheet1中,如下所示。

Excel数据样本

步骤3-SQL Server目标表

让我们创建一个目标表,从所有三个Excel文件中读取数据后,我们将在其中加载数据。请使用下面的SQL代码创建表。

USE [AdventureWorksDW2008R2]
GO
CREATE TABLE [dbo].[ImportMultipleExcelFiles](
    [EMPID] [int] NULL,
    [EMPNAME] [nvarchar](255) NULL
)
GO

步骤4-SSIS套件建立

创建一个程序包并将其命名为ImportMultipleExcelFiles,请参考下图。

创建SSIS包

步骤5-SSIS程序包变量

请创建一个名为FileName的变量,此变量的范围为ImportMultipleExcelFiles,数据类型为String请参考下图。

创建SSIS变量

步骤6-SSIS Foreach循环容器

在控制流任务中添加一个Foreach循环容器,请参考下图。

 

 

添加ForEach循环容器

步骤7-SSIS Foreach循环容器集合

编辑Foreach循环容器,在“ 收集”部分中将Enumerator更改“ Foreach File Enumerator”请参考下图。

编辑ForEach循环容器

我们必须更改Enumerator配置,如下所示。

  • 文件夹:提供完整的文件夹路径位置,所有我们的Excel源文件都存储在该路径中。我们已将所有Excel文件存储在C:\ Excel_Exercise \ Excel_Source中。
  • 文件:我们需要从源文件夹中读取Excel文件,因此请在“文件”部分中输入 * .xls,这将确保我们的SSIS包将从源文件夹中读取所有可用的.xls文件。此处*表示Excel文件名可以是任何名称,但文件扩展名为.xls如果我们需要从特定的Excel文件名中读取数据,则必须进行相应的配置。
  • 检索文件名:请选择完全合格单选按钮。请参考下图作为参考。
枚举器配置

要为Foreach循环容器创建变量映射,请选择“ User :: FileName”变量,然后在“变量映射”部分中将Index值设置为0。请参考下图。

ForEach循环容器变量映射

步骤8-SSIS数据流任务

Foreach循环容器内添加数据流任务,请参考下图。

在SSIS中添加数据流任务

右键单击最近添加的数据流任务,然后单击属性,请参考下图。

数据流任务属性

请将DelayValidation属性标记True,请参考下图。

 

 

数据流任务延迟验证

步骤9-数据流任务中的Excel源

在数据流任务中添加Excel源,并创建与任何Excel源文件的新连接。

Excel来源协助

就我而言,我使用的是First_Excel_Souce.xls,请参考下图。

Excel源文件夹路径

打开Excel Source Connection并确保其配置如下所示。

Excel源代码编辑器

步骤10-数据流任务中的OLEDB目标

在数据流任务中添加OLE DB目标任务,并创建到目标数据库的连接。选择目标表(ImportMultipleExcelFiles),然后将可用的输入源列映射到可用的目标列。请参考下图。

添加OLEDB目标任务

添加OLE DB目标任务后,您的数据流任务应如下图所示。

数据流任务的源和目标

步骤11-配置动态Excel源连接

到目前为止,我们的Excel源连接已固定到一个名为First_Excel_Source.xls的文件我们必须使Excel连接动态化,以便它可以连接到源文件夹中的每个Excel文件。要使Excel源连接动态化,请右键单击Excel Source Connection,然后单击“属性”。您可以参考下图。

Excel连接属性

请展开表达式属性,然后选择“连接字符串”属性,然后单击表达式图标。请参考下图。

连接属性表达式

请复制以下代码并将其粘贴到表达式窗口中。

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+@[User::FileName]+";Extended Properties=\"Excel 8.0;HDR=YES\";"

单击“评估表达式”按钮以确保它不会引发错误,然后单击“确定”按钮。请参考下图。

连接字符串表达式

步骤12-执行SSIS程序包

让我们执行SSIS包,如您从SSIS包下面的图像中成功执行所见。

执行SSIS包

第13步-审核最终数据

让我们预览目标表中的数据。从下图可以看到,所有三个Excel文件的数据都是根据我们的要求加载的。

数据预览目标表
posted @ 2020-08-13 09:16  Javi  阅读(575)  评论(0编辑  收藏  举报