Sql-Server-2008

執行時和執行期間的 SSIS 連接字元串表達式

  • August 30, 2013

我有一個 Excel 連接管理器,它應該寫入一個在執行前不存在但在執行期間創建的文件。我為 excel 連接管理器的連接字元串屬性設置了一個表達式,它指向將要創建的文件。我遇到的問題是,由於文件尚不存在(在執行之前),當我去執行包時它給了我一個錯誤,因為它找不到文件。如果我創建一個虛擬文件並將其放置在 excel connec 管理器指向的位置,則程序包將執行正常。

我試圖做的是在執行時之前將 excel 連接管理器指向現有文件,因為它不會給出錯誤,然後跳躍它會從表達式中獲取新的路徑(excel 連接字元串)但是發生了什麼是因為我為連接字元串屬性設置了一個表達式,它不會讓我覆蓋連接字元串屬性,它一直預設為包含在執行時填充的其他變數的表達式的值,這就是我得到的地方我的錯誤。執行時之前的表達式字元串沒有指向實際文件,因為它還不存在,但主要是因為表達式直到執行時才完全填充,因為它還包含變數。

截至目前,似乎我可能只需要在執行前指向一個虛擬模板文件(不使用任何表達式),然後可能使用腳本將 excel 連接管理器的連接字元串屬性更改為 = 包含一個變數包含文件路徑的表達式….

這聽起來像是要走的路還是我把事情複雜化了?

當一個包收到啟動信號時,它執行的任務之一是確保它所需的一切都可用並具有適當的簽名。SSIS 是關於元數據的。這背後的想法是,如果一個包可以在開始時告訴它會發生錯誤(無法連接到伺服器,表不存在,數據類型不兼容等),那麼它應該在它做任何工作之前就炸毀。 . 這通常是一件好事,為什麼要開始一些你知道你無法完成的事情,並可能讓自己處於混亂/不一致的狀態。

在您的場景中,它正在驗證該文件是否存在,因為它不存在,因為它是在執行時生成的,所以它會失敗。因此,您必須對其進行標記,以便在需要資源時立即進行驗證。正如@mike Henderson 所指出的,您需要進入對象的屬性並將DelayValidation值從更改FalseTrue。您可能需要在連接管理器使用它的數據流任務上都設置它。點擊該項目一次,按 F4 或右鍵點擊並選擇屬性。

引用自:https://dba.stackexchange.com/questions/48963