2017-10-13 54 views
0

問題:SSIS的Excel連接字符串不枚舉文件更新

我的Excel連接管理器的文件路徑沒有被更新的變量通過傳遞的更新Foreach文件枚舉器。

功能要求:

我有我需要通過進口來迭代到SQL Server數據庫的目錄裏面一組Excel文件。

這些文件的第一個限制是其中一個列在每個單元格中最多有3000個字符(吹出標準的255個字符最大值)。

第二個限制是我有一個限制在這裏,我不能採取正常的路徑和更新註冊表來採樣更多的行(我通常會創建一個初始幾行的初始文件具有3000個字符的列)。

解決構想:

原型: 爲了對抗> 255字符細胞和編輯我選擇使用腳本任務它充分利用了Excel連接註冊表的禁令。 參考:
https://egilhansen.com/2015/07/28/ssis-solution-excel-data-source-text-truncation-column-more-than-255-characters/

我有一個單一的數據流任務導入使用該腳本的工作一個文件,所以劇本的聲音。

FYI,數據流的任務僅具有3在它的數據流項目: 1)腳本任務攝取的excel文件 2)派生列,在所列舉的filstring 3)一個OLE DB加載添加內容這些到一個數據庫

所有文件夾中的解決方案文件:

我再建立起一個foreach循環容器和複製的腳本任務到它。

我配置了Excel連接的表達式的屬性,使其具有文件路徑的屬性,並將文件名變量映射到foreach文件枚舉器映射到的文件變量。

最後,我在流控任務,Excel連接和Excel連接管理器的屬性上設置了Delayvalidation。

旁註:在Foreach File枚舉器中,派生列實際上正確地在枚舉的文件名中添加了正確 - >它只是不更新​​的excel連接字符串。

結束語: 我把改變excel文件表達式變成一個ConnetionString並添加到另一個變量和腳本任務來改變它在foreach循環內(利用枚舉文件變量),但ConnetionString變量isn'更新......我現在想知道是否需要在現有的foreach循環中嵌套一個foreach循環容器來更新excel連接字符串變量,然後繼續執行主腳本

+0

我也看了一堆關於如何在excel文件的文件夾中使用foreach文件循環的指導博客: – Minniman

+0

例如https://mikedavissql.com/2013/09/16/loop-通過excel-files-in-ssis/ – Minniman

+0

區別在於我使用的腳本任​​務連接到Excel連接管理器連接而不是Excel數據流源 – Minniman

回答

0

我沒有評論的聲望,我很抱歉。我在你最近的評論中看到你說連接字符串沒有更新。這是我在SSIS之前遇到的一個問題,它不會在組件內部分配變量的值。意思是如果你在循環內部,它將不會賦值直到它完成循環。這也適用於數據流。解決它的方法是將該值設置爲像嵌套循環中所提示的那樣。如果您不介意,我們可以將其用作評論,以幫助您解決問題。

+0

感謝凱爾,是的同意重新構思的問題是「如何配置我的原始循環內的嵌套循環傳遞正確枚舉的文件和fliepath到 – Minniman

+0

也更新連接字符串變量以及執行腳本任務組件,都使用相同的變量「 – Minniman

+0

對於任何人跟隨此線程,我已經找到另一個線程處理問題,我看到上面使用嵌套的foreach循環。它的線程參考是在https://stackoverflow.com/questions/7411741/how-to-loop-through-excel-files-and-load-them-into-a-database-using-ssis-package。我已經能夠使這個工作合併我以前的c#腳本對象,它現在克服了255字符限制 – Minniman