【问题标题】:SSIS Lookup to Excel file causes export to excel destination to failSSIS 查找 Excel 文件导致导出到 Excel 目标失败
【发布时间】:2015-02-06 00:08:30
【问题描述】:

我有一个 SSIS 包,除了一部分之外,它都经过测试并且工作正常。当我尝试将数据导出到以前在 Lookup 函数中使用的 Excel 文件时,它返回此错误:

[Excel 目标 1 [3340]] 错误:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80040E09。

我已尝试复制文件,然后将数据导出到副本,它工作正常 - 只有在导出到查找中使用的同一文件时才会失败。我有一种感觉,查找功能使用我为它创建的 OLE DB 连接并将其保持打开状态,因此当 Excel 连接管理器尝试访问要在其上写入的文件时,它被拒绝。

我尝试将 OLE DB 与 Excel 文件的连接更改为只读,并在 Lookup 上使用完整缓存和无缓存,但这些都没有帮助。感谢任何建议。

【问题讨论】:

  • 您正在尝试使用 Excel 文件作为目标作为查找源?
  • 是的。我试图通过这个来完成的是检查数据库表是否具有excel文件没有的记录(通过使用查找功能),然后将缺少的任何记录添加到excel文件中。所以澄清一下 - Lookup 函数从数据库连接中获取数据流,将其与 Excel 表进行比较,然后获取不匹配的行并将它们提供给 Excel 目标。

标签: ssis export-to-excel


【解决方案1】:

我相信您的假设是正确的,SSIS 在打开 Excel 文件时对其进行了独占锁定,并且不与自身共享该锁定。快速返工是添加第二个 SSIS 包。这个使用所有 Excel 数据填充缓存连接管理器。将缓存文件持久化到磁盘

然后在您现有的 SSIS 包中,将 Lookup 更改为直接使用缓存文件而不是 Excel。现在唯一的锁定应该是 Excel 目标。

然后你需要制作你的调用模式

  1. RunNewCachePackage
  2. RunNormalPackage

【讨论】:

  • 这是个好主意。我能够在同一个包中创建第二个数据流来创建缓存;以这种方式构造它不会导致锁定问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
  • 2023-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多