2009-12-09 86 views
1

好運用的foreach循環容器的變量,我有一個簡單的過程...在SQL任務[SSIS]

  1. 讀表,並獲得該行有 一1「StatusID」簡單。

    從PreorderStatus選擇的ProductID其中StatusID = 1個

  2. FOREACH行從 查詢返回,執行動作。對於 簡單起見,我們只需要修改 原始表到 「StatusID」設置爲2

    更新PreorderStatus設置StatusID = 2,其中的ProductID = @ProductID

爲了在做到這一點SSIS,我用第一條語句創建了一個簡單的「執行SQL任務」。在編輯器中,我已經設置了結果集返回一個完整結果集結果名稱爲0被設置爲填充名爲ReadySet的對象變量。

輸出然後路由到For Each Loop容器。 枚舉器設置爲Foreach ADO枚舉器和從上面設置爲ReadySet變量的對象源變量。我還將變量v_ProductID映射到索引0.

在Foreach循環開始時設置斷點顯示正確設置的變量。大!!現在到第二步....

現在我已經在foreach容器中放置了一個新的SQL任務。現在我有一個頭刮刀。我如何在SQL語句中實際使用變量?簡單地使用「v___ProductID」或「User :: v_ProductID」似乎不起作用。映射一個參數似乎是一個好主意(得到@ProductID和一切!),但似乎也沒有工作。

我覺得我錯過了一些非常簡單的東西,但不知道是什麼。謝謝你的幫助!!

回答

1

我認爲這是一個更好的辦法。以下是大致的步驟:

  1. 將DataFlow任務拖放到設計圖面上。
  2. 打開它並添加一個OLE DB源和OLEDB命令組件到設計界面。
  3. 修改源以使用您描述的查詢。
  4. 將源連接到Command組件。
  5. 修改命令組件使用「Update PreorderStatus set StatusID = 2 where ProductID =?」查詢並在param映射頁面上映射?變量來自數據源的輸入。

HTH

+0

訣竅是 '?'。顯然,我忘記了我在SRS上的所有工作,並依靠我的存儲過程完成所有使用命名參數的工作。去搞清楚。還值得一提的是,當映射的時候?到一個可變的你使用基於零的序數位置(0,1等)。 – Craig 2009-12-10 15:29:36

0

當我想要使用execute sql任務並根據變量改變某些內容時,我使用存儲過程並將該變量設置爲proc的輸入參數。

然後,設置在執行SQL任務parmeter和SQL語句設置爲一樣的東西:

exec myproc ?