2013-04-10 51 views
0

我有一個SSIS數據流任務,可以讀取某些字段的CSV文件,稍微調整一下並將結果插入表格。源文件名是一個包參數。那裏一切都很好。如何使SSIS根據參數選擇數據源?

現在,我需要處理略有不同類型的CSV文件和一個額外的字段。這個額外的字段可以安全地忽略,所以處理過程基本上是一樣的。唯一的區別是在數據源的列映射中。當然,我可以創建整個包的副本並調整數據源以匹配第二種文件格式。然而,這個「解決方案」看起來很糟糕的重複:如果處理過程中有任何變化,我將不得不做兩次。我寧願將另一個參數傳遞給包來告訴它要處理的文件類型。

麻煩的是,我不知道如何根據參數從一個數據源或另一個數據源讀取SSIS,因此這個問題。

+0

可能是這個問題的重複,所以我會看看我的答案不適用於此。 http://stackoverflow.com/questions/8168548/ssis-task-for-inconsistent-column-count-import/8173162#8173162 – billinkc 2013-04-10 20:21:12

+0

這可能工作。我會檢查出來並讓你知道。 – 2013-04-10 20:54:44

+0

第二個想法是,只有兩種CSS文件具有完全相同的列名時,這可能會適用,可能按不同順序並且省略一些列。例如。如果一個文件具有「Price」列而另一個具有「FinalPrice」,那麼將需要條件查詢邏輯,因此原始問題就成立了。 – 2013-04-10 21:04:05

回答

1

我會複製SSIS包中的連接管理器(CSV定義)和數據流,並將它們調整爲新的文件格式。然後,我將使用您描述的參數啓用/禁用任何數據流。

實質上,SSIS不支持可變元數據。如果這將是一個反覆出現的模式,我會從SSIS上游處理它,建立一個VB/C#命令行應用程序將文件分解成SQL表格。

0

您可以讓連接管理器將所有數據推送到1列。然後使用腳本轉換組件將數據解析到輸出,具體取決於行中字段的數量。

您可以根據分隔符將數據拆分成一個字符串數組(當我需要這樣做時,我會搜索幫助)。通過數組,你可以知道它的大小以及它連接到的文件類型。

然後,您到目標的映射可以保持不變。無需複製任何組件。

我不得不自己做一次類似的事情,因爲儘管我使用的文件是始終是相同的格式 - 取決於發送文件的系統版本,它可能會更改 - 因此通過在腳本轉換這種方式我能夠處理文件格式的微小變化。如果這些文件是99%總是相同的,那麼可以。如果它們完全不同,那麼最好使用單獨的文件連接管理器。