2017-09-04 88 views
0

大家好我每次使用sqlserverdatatools 2014來開發我的ssis包在這裏我卡在場景 我有一個包它有4個數據流它應該運行在下面的循環 1,2,3,4 2,3,4 3,4 1,2,3,4 4 所有的數據流都在更新相同的數據庫,但由於某些商業計算軟件包應該在邏輯上運行,請幫助我如何實現這一點 在此先感謝 R 哈里克里什SSIS包循環運行在相同的數據庫相同的包中

+0

您的循環邏輯不清楚。這些數字是什麼?他們是數據流任務號碼,如DFT1,DFT2等? – VKarthik

+0

你好Karthik,是的這些都是數據流任務DFT1,DFT2,DFT3,DFT4 – krish

+0

我不確定這是否是最好的方式,但它應該像這樣工作:您可以使用Foreach循環來遍歷包含數組你的號碼:[1,2,3,4,2,3,4,3,4,4,1,2,3,4]。你應該使用Foreach Item Enummerator。在您的Foreach循環中,您可以使用數據流的Skript任務,這將根據迭代的當前變量執行數據流。 – eztam

回答

0

這是一個解決方案。

  1. 1.增加SQL表達式
  2. 連接到設置爲結果集
  3. 輸入以下SQL任何DB
  4. 變化結果:SELECT * FROM(值(1),(2),(3),(4),(5)),其爲(NUMS)
  5. 保存結果到ADO對象
  6. 添加foreach循環
  7. 集合是一個ADO .net對象
  8. 它設置爲您ADO對象
  9. 添加的表達式(放1 = 1到剛剛驗證
  10. 添加您4個數據流
  11. 連接到DF1
  12. 添加表達式,以流動@num < 2 || @ NUM == 5
  13. 照此除了改變表達@num < 3 || @ NUM == 5

最終的結果將是5個環路在每個環路進行處理,以下DF:

第一:1-4

第二:2-4

第三:3-4

第四:4

5:1-4

+0

你需要2個變量nums(object)和num int – KeithL

+0

我相信OP需要DFT以特定的順序執行,而他並沒有考慮循環它。 – VKarthik

0

這裏是你需要做什麼 -

  1. 創建一個表,並說明dbo.DataFlowOrder與列Id int並插入值(1,2,3,4 2,3,4,3,4,4,1,2,3,4)
  2. 創建以下變量 - intDataFlowOrderId,objDataFlowOrderIdList,strSQLGetDataFlowOrderIdList
  3. 如下設置strSQLGetDataFlowOrderIdList的價值 - 從dbo.DataFlowOrder

  4. 選擇ID '執行SQL任務'。將'ResultSet'屬性設置爲'Full Result Set','SQL Source Type'爲'Variable'。給予適當的連接並將「源變量」設置爲strDataFlowOrderIdList。在「結果集」下點擊「添加」。將「結果名稱」設置爲0,將「變量名稱」設置爲objDataFlowOrderIdList。

  5. 拖動'Foreach Loop'容器並將其連接到上述任務的輸出。將'Enumerator'設置爲'Foreach ADO enumerator'並將enumaration變量設置爲'objDataFlowOrderIdList'。在'變量映射'選項卡中,將變量設置爲'intDataFlowOrderId'
  6. 在'Foreach Loop'容器中,拖動'執行SQL任務'並將其重命名爲'SQL - DFT協調器'。設置適當的連接值並將SQLStatement設置爲「select 1」。
  7. 將所有4個DFT拖入其中。連接上述任務的輸出,即連接所有4個DFT。
  8. 在每個「優先約束」連接器中,將「評估操作」設置爲「表達式和約束」。 '優先約束'只不過是綠線,即您在任務與任務之間連接的輸出。對於第一個DFT,將'Expression'設置爲'@ [User :: intDataFlowOrderId] == 1'(不帶引號)。重複同樣的過程的DFT的休息與適當的數量,即2,3,4等

以下是控制流看起來應該像截圖 - Control Flow Overview

這裏是一個'Precedence Constraint'的屏幕截圖 - Precedence Constraint setting

+0

感謝您的回答讓我檢查一次! – krish

相關問題