【问题标题】:How to overwrite Excel destination in SSIS?如何覆盖 SSIS 中的 Excel 目标?
【发布时间】:2022-02-16 22:11:12
【问题描述】:

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

第一次很好用。第二次将重复数据存储在 Excel 文件中。

如何覆盖 Excel 文件行?

【问题讨论】:

  • 您想始终创建新文件,还是:插入新行、删除不存在的行并更新目标 excel 中的现有行?

标签: ssis


【解决方案1】:

是的,可能!

解决办法如下:

首先转到您的 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/

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • @GergoErdosi,答案相应修改。
  • @GergoErdosi,我回答了这个问题,它肯定有效。然而,我没有得到奖励,而是失去了积分!这不公平,是吗? :)
  • @Sahand,很好,虽然我不得不使用像 DROP TABLE [mySheet$] 这样的语法。 +1
  • 如果文件真的存在就可以了,但是第一次呢?我收到异常“表 'MY TABLE NAME' 不存在。”
【解决方案2】:

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

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

The File System Task (MSDN)

【讨论】:

    【解决方案3】:

    是的,可能!

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

    首先,在一个位置创建一个 Excel 格式文件(使用 Excel Connection Manager 的结构格式)作为模板文件。然后使用 FILE SYSTEM TASK 在另一个位置创建该 excel 文件的副本,并确保 SET OverwriteDestination=True。最后,使用数据流任务,将数据插入到新复制的文件中。每当我们想要插入数据时,它都会创建一个模板 excel 文件的副本,然后加载数据。

    【讨论】:

    • 很好的建议 - 跳出框框思考!谢谢你。
    • @manoj,我创建了一个 OLE DB 连接和一个 Excel 连接管理器来将数据写入 Excel 文件。然后,我创建了一个文件系统任务来创建该 Excel 文件的副本并设置 Is-Overwrite=True。现在,如果我运行数据流任务,它会不断将数据附加到原始 Excel 文件中,并且文件系统任务将该文件复制到单独位置的新文件中。
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      使用带有平面文件连接管理器的 CSV 文件可以达到覆盖的目的。

      【讨论】:

        【解决方案6】:

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

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

        我先:

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

        然后在foreach容器中:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多