如何将查询命令中的结果集导出到SSIS包中的excel文件中?
一个主要问题是excel datasheet标题名称将在每月更改。
就像在FEB月份一样,excel文件头将是
Name,Address,FEB,JAN,DEC......
在MAR月份,excel文件标题将会更改,它将变为
Name,Address,MAR,FEB,JAN,DEC......
我该怎么做?
答案 0 :(得分:0)
我没有看到一种方法,而不会弄脏并篡改Interop.Excel。
以下是:
它有点难看,但你会完成你的工作。
有关示例,请参阅this。
答案 1 :(得分:0)
通过给定的方式执行此操作。
<强> 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
使用逻辑
档案位置
我创建了一个舞台表,每个excel有2个表。在您的情况下,假设自动化系统负责创建这些表。
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的第三列相同,等等。 我希望我们可以使用相同类型的代码实现您想要的结果。