2015-02-04 46 views
0

我有一個SSIS包是所有測試和工作正常,除了一部分。當我嘗試將數據導出到以前在查找功能中使用的Excel文件時,它將返回此錯誤:SSIS查找到Excel文件導致出口到excel目的地失敗

[Excel目標1 [3340]]錯誤:SSIS錯誤代碼DTS_E_OLEDBERROR。發生了OLE DB錯誤。錯誤代碼:0x80040E09。

我已經嘗試複製文件,然後將數據導出到副本,並且工作正常 - 導出到查找中使用的同一文件時,它只會失敗。我有一種感覺,Lookup函數使用我爲它創建的OLE DB連接並將其保留爲打開狀態,以便當Excel連接管理器嘗試訪問該文件以在其上寫入時,它將被拒絕。

我試着改變Excel文件的OLE DB連接是隻讀的,並且在查找時使用完全緩存和沒有緩存,但這些都沒有幫助。感謝任何建議。

+0

您正在嘗試使用Excel文件作爲目的地*和*爲源查找? – billinkc

+1

是的。我試圖通過這個來實現的目的是檢查數據庫表是否記錄了excel文件沒有記錄(通過使用查找函數),然後添加缺少的任何記錄到excel文件。爲了澄清 - Lookup函數從數據庫連接中獲取數據流,將其與Excel表進行比較,然後獲取不匹配的行並將它們提供給Excel目標。 – TPhe

回答

0

我相信你的假設是正確的,SSIS在打開Excel文件時會獨佔鎖定,並且不會與自己共享該鎖定。快速返工將是添加第二個SSIS包。這個用所有的Excel數據填充緩存連接管理器。將緩存文件保存到磁盤

然後在您現有的SSIS包中,將查找更改爲直接使用緩存文件而不是Excel。現在唯一的鎖應該用於Excel目標。

然後,您就需要讓你的調用模式

  1. RunNewCachePackage
  2. RunNormalPackage
+0

這是一個好主意。我能夠在同一個包中創建第二個數據流來創建緩存;以這種方式構造它不會導致鎖定問題。 – TPhe