2012-07-24 69 views
1

我有2個ssis包,它使用相同的查詢(對package1和package2的查詢有細微的差別),並給出2個提取sample1.csv和sample2.csv如何重複使用同一套代碼的2個包

而不是使用兩個包,我希望只使用單一封裝到平行取提取物對於這種情況。

通過運行sinle的工作,我希望每次提取sample1.csv和sample2.csv。

在我的兩個包,我已經使用在執行SQL任務臨時表,所以在數據流任務,我已經採取了腳本組件來獲得的列名和數據。

我已附加的示例查詢結果輸出Package1 output extract

Package2 output extract

圖像顯示一個查詢結果我已經在包1中。圖2顯示了我在package2中使用的查詢結果。

+0

因此,我正確理解您要導入sample1.csv和sample2.csv,並使用一個包進行此導入? – Josien 2012-07-24 08:54:36

+0

是的,但我不想保留兩個DFT的package1和另一個package2。 – user1348424 2012-07-24 09:33:14

回答

0

我有類似的情況。解決方案如下:

  1. 在SQL Server中創建表(「運行」)含有ID欄,查詢列和目的列
  2. 創建每「運行」的一個記錄(即每現有封裝) ,在查詢欄中不同的查詢
  3. 創建一個執行SQL任務父包查詢運行表,返回所有要求的查詢和輸出放到一個對象變量
  4. 添加爲每個枚舉循環通過返回的記錄,將Query列映射到Query變量,將Destination列映射到Destination變量
  5. 在每個枚舉器的內部,添加執行包任務,指向您現有的「子」包
  6. 在子包中,添加另一個查詢變量並設置包配置以獲取父級的查詢變量。對目的地執行相同操作
  7. 修改您的子包中的數據源以使用變量中的sql命令並將其指向查詢變量
  8. 修改Child包目標中使用的文件管理器以使用構建使用目標變量的文件路徑/名稱

請注意,只有每個查詢返回具有相同數據類型和數據長度的完全相同數量的列時,它才起作用。如果沒有,你會得到各種元數據錯誤。

以上這可以在通過在SQL Server數據庫中創建一個存儲過程或用戶定義的函數,以集中的查詢,並只儲存在運行表粒狀參數加以改進。