如何在SSIS中覆盖Excel目标?

时间:2011-11-05 06:09:17

标签: ssis

我创建了一个包来从两个SQL Server表中获取数据,并使用合并连接组合这些数据,然后将结果存储到Excel目标中。

第一次工作正常。第二次将重复数据存储在Excel文件中。

如何覆盖Excel文件行?

6 个答案:

答案 0 :(得分:9)

是的,可能!

以下是解决方案:

首先转到Excel目标单击“Excel表格”旁边的“新建”按钮,复制内部的DML查询。 然后将执行SQL任务放入控制流并将其连接到包含Excel目标的数据流。将连接类型设置为Excel,将连接设置为Excel目标的Excel连接管理器,转到SQL语句并键入:

Drop TABLE `put the name of the sheet in the excel query you just copied`
Go

最后粘贴查询。

您需要做的就是解决问题。

您可以参考此链接获取完整信息: http://dwhanalytics.wordpress.com/2011/04/07/ssis-dynamically-generate-excel-tablesheet/

答案 1 :(得分:6)

不幸的是,Excel连接管理器没有允许覆盖数据的设置。您需要使用控制流中的文件系统任务设置一些文件操作。

有几种可能性,这是其中之一。您可以创建模板文件(仅包含带有标题的工作表),在数据流转换之前,文件系统任务将其复制到先前导出的文件上。

The File System Task (MSDN)

答案 2 :(得分:4)

是的,可能!

使用SSIS我们可以解决这个问题:

首先,在一个位置创建Excel格式文件(使用 Excel连接管理器的结构格式),然后使用文件系统任务创建另一个Excel文件的副本位置并确保SET Is-Overwrite = True ,并使用数据流任务将数据插入新文件复制文件。每当我们想要插入数据时,它将创建空白的excel文件,然后加载数据

答案 3 :(得分:1)

对于Excel,它会附加数据。没有这样的选项可用于覆盖数据。

您必须通过文件系统任务删除并重新创建文件。

答案 4 :(得分:0)

将CSV文件与平面文件连接管理器一起使用将有助于您覆盖。

答案 5 :(得分:0)

对我来说最好的解决方案是使用文件系统任务从模板中删除和重新创建 Excel 文件。

我试图做的是向每位员工发送一份带有 Excel 附件的相同格式但数据不同的报告。在每个员工的 foreach 容器中,我获取所需数据、创建 Excel 文件并发送附有 Excel 文件的邮件。

我先:

  1. 创建 Excel 模板(手动)
  2. 创建要使用的原始 Excel 文件(手动)

然后在 foreach 容器中:

  1. 删除原始文件(SSIS文件系统任务)
  2. 将模板复制为原始文件(SSIS 文件系统任务)
  3. 从 SQL Server 获取数据并将它们写入原始文件(SSIS 数据流任务)
  4. 发送邮件(SSIS -> SQL 存储过程)