1

我正在编写一个 SSIS 包以每周从数据库中提取数据并将其写入 excel 文件。每次卸载数据时,都必须从头开始重新生成 excel 文件。我意识到如果我在数据流任务中使用 excel 目标,我无法覆盖现有文件,所以我尝试执行以下操作:

  1. 在数据卸载之前添加一个执行 SQL 任务,以使用以下 sql 在文件中重新创建现有工作表

    DROP TABLE Users$

    GO

    CREATE TABLE Users$ ( Ref NVARCHAR(10), Username NVARCHAR(20), Active INT, Absent INT, Allow Reconciliation NVARCHAR(4), Prefix NVARCHAR(10), First Name NVARCHAR(25), Middle Name NVARCHAR(25), Last Name NVARCHAR(40), Suffix INT, Email NVARCHAR(33), Work Phone NVARCHAR(10), Required Approvals NVARCHAR(1), Division/Section Ref NVARCHAR(15), Grade Ref NVARCHAR(9), Cost Centre Ref NVARCHAR(15), Location Ref NVARCHAR(5), Last Hire Date NVARCHAR(10), Original Hire Date INT, Manager Ref INT, Approver Ref NVARCHAR(6), Gender NVARCHAR(6), Ethnicity NVARCHAR(25), Language NVARCHAR(5), Expiry Date NVARCHAR(10), Staff Category NVARCHAR(50), Source of Funding NVARCHAR(4), BAC Number INT, Title NVARCHAR(50) )

    GO

  2. 保留一个只有列标题的空文件模板,以确保保留列映射,并在数据流任务之前使用脚本任务,用它替换任何现有的输出文件。

在这两种情况下,包都成功执行,我在日志中看到它说记录已写入 excel 文件,但是当我打开文件时,我只看到标题行,没有数据。我的印象是,当替换文件或重新创建工作表时,列映射会变得混乱,我不确定如何继续。

编辑:我必须提到,单独执行数据流任务最终会写入记录。请指教谢谢

4

1 回答 1

0

一种可能的解决方案,完全未经测试,但它应该工作:

  1. 使用脚本任务将唯一值写入变量。我建议使用 guid 或基于日期/时间的字符串。
  2. 首先执行数据流任务,将数据与 guid 一起插入单独的列中
  3. 在数据流之后对 excel 文件运行脚本任务,删除 guid 列不等于变量中的值的行

唯一的问题是 guid 将保留在 excel 文件中。

希望有帮助。

于 2013-03-26T19:32:55.213 回答