2012-05-24 66 views
1

我有一個SSIS包,它使用腳本和一個foreach容器更新一對夫婦的表以及其他一些東西。我使用SqlConnectionSqlCommand在foreach容器之前調用的腳本任​​務此查詢:如何在SSIS中使用foreach循環容器遍歷多維數組?

SELECT TOP 10 DirectoryID, DirectoryPath FROM ProjectDirectory ORDER BY LastAudit

和正在使用SqlDataReader將其添加到多維數組[10.2]。我將該數組賦給一個對象變量DirectoryList,以便我可以在foreach循環容器中遍歷它。它應該看起來像{{「1」,「C:\ Folder1」},{「2」,「C:\ Folder2」},...}我相信。

問題是幾天前我剛開始使用這個軟件,並且對foreach循環容器如何通過變量DirectoryList循環感到困惑。此刻,在容器的集合選項卡中,我將Enumerator設置爲Foreach From Variable Enumerator,變量設置爲User::DirectoryList。我將變量User::DirectoryID設置爲索引0,而User::DirectoryPath設置爲索引1.我試圖讓它通過數組的頂層進行循環,以便在每個循環中將ID和路徑變量分配爲「1」和「C:\ Folder1」,然後下一次它通過它們分配給「2」和「C:\ Folder2」等循環時,我有一個腳本組件使用路徑來查找一些信息,而我使用該id來更新SQL表的正確行。

爲了進行調試,我讓它給我看第一次迭代的ID和路徑MessageBox.Show(Variables.DirectoryID + ", " + Variables.DirectoryPath),它顯示「8,8」。 8對應於應該首先顯示的行的id。下次運行時,它會給我兩次正確的路徑,「C:\ Folder1,C:\ Folder1」。顯然變量映射不起作用,它將兩個變量映射到同一個索引。在任何情況下,它不工作,所以我在想,無論是(也可能是兩者),Foreach From Variable Enumerator不是我應該選擇的那個,或者我不能在一個foreach容器中使用多維數組。我搜索了一下,沒有發現,這可能很難理解,但有什麼建議嗎?

回答

2

好吧,你其實不需要那樣做。由於您的源代碼是t-sql查詢,因此您可以使用「執行sql任務」來運行它。但這很好,它也可以這樣做。實際上,我正在處理一個包,它將一個結果集放入一個腳本任務的數據表中,並將其加載到一個對象變量中,就像您對DirectoryList所做的一樣。

要閱讀的價值,只是配置循環這樣的,其中變量是對象變量:

enter image description here

和映射選項卡上,像這樣: 其中變量是包變量您希望放置第一列(索引0)的值。您可以擁有與結果集上的列一樣多的索引。

enter image description here

,就是這樣,你的循環裏面,你將有機會獲得您的變量與當前值

+1

真棒的感謝!我最終使用了執行SQL任務,因爲就像你說的那樣,這就是腳本的全部功能。現在我只想弄清楚如何將DateTime變量傳遞給不同的執行SQL任務並更新表中的一行。我會谷歌周圍,謝謝! –