使用SSIS在Excel文件中导出值

我如何将查询命令的结果集导出到SSIS包中的Excel文件中?

一个主要的问题是Excel数据表头名称每月都会改变。

就像FEB月份的excel文件头一样

Name,Address,FEB,JAN,DEC...... 

在MAR月excel文件头将改变,它会成为

  Name,Address,MAR,FEB,JAN,DEC...... 

我怎样才能做到这一点??

我没有看到一种方式不把你的手弄脏和篡改Interop.Excel。

就是这样:

  1. 使用例如执行SQL任务将您的数据集填充到对象variables中
  2. 使用脚本任务利用Interop.Excel以编程方式访问您的XLS,擦除它,从提到的variables写入新的数据,并closures它。 顺便说一句,这是你处理你dynamic的一组列。

这有点丑,但你会完成你的工作。

例如,看到这个 。

通过这样做的既定方式。

prerequesite

 1. I assume that the Excel files come at same location with names as follow. JAN14 FEB14 MAR14 2. JAN14 Columns be Name,Address,JAN14,DEC14,NOV14 FEB14 Coulmns be Name,Address,FEB14,JAN14,DEC14 

使用逻辑

  1. 将所有的Excel表加载到舞台表中。
  2. 然后将这个阶段表中的每组数据dynamic加载到相应的表中。

文件位置 在这里输入图像描述

我创build了一个舞台表,每个excel有2个表格。 在你的情况下,假设一个自动化系统负责创build这些表。

 Create table Stg (F1 varchar(50), F2 varchar(50), F3 varchar(255), F4 varchar(255), F5 varchar(255), src varchar(50)) Create table Jan14 (Name varchar(50), Address varchar(50), Jan14 varchar(255), Dec13 varchar(255), Nov13 varchar(255)) Create table Feb14 (Name varchar(50), Address varchar(50), Feb14 varchar(255), Jan14 varchar(255), Dec13 varchar(255)) 

SSIS包

在这里输入图像描述

Excel源连接如下

在这里输入图像描述

在For-each循环执行之后, Src数据将如下所示

 Select * from Stg 

在这里输入图像说明

最后一个sql任务的内容如下。

 Declare @a int = (Select COUNT(Distinct Src) from Stg) Declare @b table (id int identity(1,1),Src varchar(50)) Insert into @b Select Distinct Src from Stg Declare @c int = 1,@d varchar(max) While @c <= @a Begin Set @d = 'Insert into ' + (select Src From @b Where id = @c) + ' Select F1,F2,F3,F4,F5 FROM Stg WHERE Src =''' + (select Src From @b Where id = @c) + ''' AND F1 != ''Name''' Set @c = @c + 1 Exec(@d) End 

在包执行结束时,我得到如下结果。

 Select * from [dbo].[Jan14] Select * from [dbo].[Feb14] 

在这里输入图像说明

这里的一些约束只是为了方便,就像excel的名字和excel的第三列一样,我希望我们可以用同样的代码实现你想要的结果。