Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SSI将多个不同的Excel工作表ETL到SQL Server 2008中的最佳方法_Sql_Ssis_Etl - Fatal编程技术网

使用SSI将多个不同的Excel工作表ETL到SQL Server 2008中的最佳方法

使用SSI将多个不同的Excel工作表ETL到SQL Server 2008中的最佳方法,sql,ssis,etl,Sql,Ssis,Etl,我已经看到了很多例子,说明了如何使用Foreach循环容器枚举Excel工作簿或工作表集合,假设所有源文件的数据结构都相同,并且数据都将发送到单个目标表 处理以下情况的最佳方法是什么: -单个Excel工作簿(含10-20张工作表)或10-20 Excel工作簿(含1张工作表)。 -每个工作簿/工作表都有不同的架构 -每个源工作表都有1:1的匹配目标表。 -标准清理:将创建工作簿并将其放置在“加载”文件夹中,SSIS包在作业上运行,该作业读取加载文件夹中的文件,并在成功完成后将其移动到存档文件夹

我已经看到了很多例子,说明了如何使用Foreach循环容器枚举Excel工作簿或工作表集合,假设所有源文件的数据结构都相同,并且数据都将发送到单个目标表

处理以下情况的最佳方法是什么: -单个Excel工作簿(含10-20张工作表)或10-20 Excel工作簿(含1张工作表)。 -每个工作簿/工作表都有不同的架构 -每个源工作表都有1:1的匹配目标表。 -标准清理:将创建工作簿并将其放置在“加载”文件夹中,SSIS包在作业上运行,该作业读取加载文件夹中的文件,并在成功完成后将其移动到存档文件夹


我知道我可以为每个工作簿创建一个单独的SSIS包,但维护起来似乎很痛苦。非常感谢您的帮助

很久以前我们就面临着同样的问题。我将向你概述我们所做的工作。 我们已经用C#编写了一个SSIS程序包。维护一个元表,其中保存平面文件的信息(表名、列、这些列在平面文件中的位置)。我们提取平面文件名,然后向元表查询该平面文件所属的表、它所拥有的列以及平面文件中的列位置

我们通过将每个平面文件作为命令行参数传递给PackageExe,在SQLSERVER中执行包。因此,它读取并处理每个平面文件

示例假设我们有一个平面文件FF,我们首先提取平面文件的名称,然后通过查询数据库得到表名,假设它是TT,其中包含列COL-1COL-2,位置分别为1到1011到20。现在,通过从元表中读取这些信息,我创建了一个派生列转换(包)


我们的应用程序在一个文件夹中有一组平面文件,通过使用“For Loop Container SSIS”,我们一次得到一个平面文件并执行上述过程。

由于每个工作表都有不同的模式,因此没有简单的方法来实现这一点。无法使用标准SSIS连接管理器动态设置Excel工作簿的工作表。我会为每张工作表创建一个数据流。我同意。无法自动映射列。即使使用相同的列名。只有一些编码可以帮你一点忙,但这是一个很大的工作。