2012-01-04 96 views
1

我使用Foreach循環內的Dataflow迭代了好幾年,但有些年份不會返回任何數據,因此它們的SSIS包失敗了,有沒有辦法處理這個問題?告訴軟件包忽略這些空白並繼續執行?如何處理DataFlow任務中的空查詢結果?

感謝,

+0

你傳遞給foreach循環的是什麼,你在foreach循環中有什麼?請添加更多細節到您的文章..它會幫助加載.. – Nonym 2012-01-04 19:54:09

+0

我是一個傳遞和對象變量的foreach循環,在foreach循環內我有一個數據流任務(ole db源和目的地)使用該變量在查詢中,他們變量(使用foreach的變量)工作正常,但例如如果查詢使用沒有數據的年份(變量),則任務失敗。我想處理不返回數據的情況 – user1112251 2012-01-04 20:02:18

+0

僅供參考如果查詢類似於「Select * from sysobjects where =?」而且那一年沒有數據失敗 – user1112251 2012-01-04 20:04:55

回答

1

一種方法,你可以,如果你不想碰數據如何被傳遞到Foreach組件:

  1. 您可以包括Foreach容器首先檢查裏面是否額外Execute SQL Task組件有任何數據需要處理。

  2. 創建一個變量到您的SQL任務將設置記錄計數,例如@cntProceed

  3. 設置此組件的數據流任務之前運行。

  4. 修改優先約束(從SQL任務到您的數據流任務的綠色箭頭)。設置evaluation operationExpression and ConstraintValueSuccess,並Expression@cntProceed != 0

這一切都沒有:在foreach組件/容器內它會首先檢查是否存在任何數據的工作。這就是附加組件將要執行的操作,如果有數據要使用,它將繼續到數據流組件。否則,該"each"(或更確切地說,那一個循環)將結束,Foreach將移動到下一個。

0

我不知道爲什麼,如果查詢返回0行的數據流會失敗。一種可能的解決方案是在有效年限內詢問您的數據,並僅通過有效年份進行迭代。這可以通過以下方式進行:

  1. foreach循環容器
  2. ResultSet中設置爲全行的執行SQL任務
  3. 將結果集選項卡中的一個對象變量之前創建一個執行SQL任務
  4. 設置Foreach循環容器至一個foreach ADO枚舉
  5. 設置ADO對象源變量的對象變量
  6. 設置變量映射到一個變量的年
  7. 將年份作爲參數傳遞給數據流。

你能查看包上的代碼併發布嗎?我很樂意看到我是否能夠複製您遇到的問題,併爲您提供更直接滿足您發佈需求的解決方案。