【问题标题】:SSIS package doesn't write data to excel destinationSSIS包不将数据写入excel目标
【发布时间】:2017-02-23 17:11:19
【问题描述】:

我有一个简单的 SSIS 包,我正在尝试将同一组数据从表导出到平面文件和 Excel 目标。当我在本地运行时,该包工作正常,它使用数据创建文本文件和 excel 文件。

但是,当部署到不同的服务器时,sql 代理作业运行良好,并且包的集成服务目录中的日志显示它向 excel 写入了 9000 行,并且还创建了一个新的 excel 文件,但它没有写入任何内容数据(只有标题的空白)。文本文件工作正常,它包含我需要的所有数据。

SSIS 包流程:

我正在使用 Sql server 2014、带有 SSDT 的 Visual Studio 2013 并在 Excel 目标中使用 Excel 2007。

【问题讨论】:

  • 删除目标连接并添加新的目标管理器。然后在目标管理器中选择目标文件。这可能有效!

标签: sql-server excel ssis


【解决方案1】:

我在从计划的 SQL 代理作业写入 Excel 文件中的多个工作表时遇到了同样的问题。它工作了大约4个月。然后突然没有对包进行任何更改,5 个工作表之一不再填充数据。没有生成错误消息,并且在 Visual Studio 和 Data Tools(我们过去称之为旧的“BIDS”工具)的每个测试中都能正常工作。

我从未找到解决方案,并且它继续不将任何数据写入 Excel 文件中 5 个的单个工作表。 (因此,上面关于从 SQL 代理运行作业的帐户没有适当权限的答案不是此问题的正确答案。)

另外,我今天构建的一个新包也有同样的问题,只有这个只有一个工作表。同样,在开发环境中工作正常,但目标文件中没有数据,也没有错误。不仅如此,文件上的时间戳与模板文件相同——似乎它甚至从未尝试写入文件。

检查集成服务目录中包的每个运行日志,每个日志中都有一个条目,显示为数据流任务“写入”了 9K+ 记录。

最后,如果我更改目标文件名,SQL 代理作业会生成预期的错误,从而排除猜测路径错误的答案。

这很奇怪。并且令人气愤。

【讨论】:

  • 对于那些建议将 SQL 代理作业设置为在 32 位模式下运行的人(似乎几乎所有 SSIS 问题都建议这样做!)我描述的症状将排除该解决方案。毕竟,根据我的经验,它在 64 位下作为 SQL 代理作业运行了几个月,直到突然出现问题。另外,它仍然继续写入同一文件中的所有其他工作表,没有任何问题。很难相信(但并不奇怪)这些年来这个问题仍然存在。微软,醒醒! SSIS 和 Excel 是你的孩子——他们应该一起玩得很好!
【解决方案2】:

我们遇到了同样的问题。 解决方案是运行 SSIS 包的用户必须拥有对 c:\users\default 的完全访问权限。

您可以通过在执行 SSIS 作业的机器上运行 sysinternals 的进程监视器来检查这一点。

您可以在此处找到更多信息:

【讨论】:

    【解决方案3】:

    我在使用使用 Excel 对象的计划 SSIS 包时遇到了奇怪的行为。

    对我来说,解决方法是编辑代理作业属性。在执行属性选项卡上,尝试启用“使用 32 位运行时”选项并强制 SSIS 在 32 位模式而不是 64 位模式下运行。

    【讨论】:

    • 确实,DTSRun.exe 的位数必须与它正在使用的任何 OLE DB 驱动程序的位数相匹配,但 32 位和 64 位版本都可以在 64 位操作系统中正常工作。
    • 我尝试在 32 位模式下运行,但它不起作用,而且我们的高级环境之一没有 32 位模式驱动程序,所以我必须使用 64 位模式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多