2013-06-23 59 views
0

我想使用一個數據流任務,其中有一個來自Access DB,另一個來自SQL Server DB。然後我想操縱數據,最後在同一個SQL Server上調用一個存儲過程,這是我的第二個源代碼。SSIS使用存儲過程將DB數據存入TSQL

所以我不能使用Execute SQL Task,因爲我想操縱數據並在最後調用存儲過程。

我將使用什麼工具箱組件以及存儲過程將調用什麼格式?

我試圖做一個OLE DB目標與存儲過程稱爲這樣的事情。

Exec sppUpdateAATable1 ?,? 
+0

是在填充表的數據流任務中完成所有數據操作的唯一方法。然後第二步爲每個容器抓取數據並調用執行SQL任務,該任務調用我的存儲過程。 – joe

+0

我想使用存儲過程,因爲它更新了多個表並用於我們的應用程序中的其他功能。 – joe

回答

0

您可以爲自己節省記錄集目標和foreach循環路由的麻煩,而是在數據流中使用OLE DB Command。它會爲每個流過它的行啓動存儲過程。

1

SSIS使用管道的概念來組織DataFlow任務。數據從源流向目的地和處理這個數據發生在兩者之間。既然你想使用存儲過程中的處理結果作爲參數,它不能在流水線概念下完成。 SP並不是真正的數據目的地,因爲SP也會爲此做一些事情。

可以填充一個內存Recordset(目標),然後使用Foreach循環容器來執行你的SP爲記錄的每一行。

更新

你包應該是這個樣子:

數據流任務: OLE DB連接來訪問 OLE DB連接到SQL Server 要結合2個數據流使用UNOIN任務 記錄設置目標,在屬性中您可以命名Object(MyRecordsetVar)類型的變量。它將保存記錄集數據。

ForEach循環容器。在屬性中選擇循環容器類型--ADO Recorset,在循環屬性中指定MyRecordsetVar變量。 指定兩個(或多個所需的)變量來保存記錄集每列的數據。記錄集每行的數據將傳遞給這些變量。一次一行。

在循環內放入執行SQL任務。在任務的輸入「菜單」中指定您的INPUT變量 - 那些具有來自記錄集列的數據的變量。我會假設你知道如何去做。

將您的查詢放入任務execute sp_MyProc ?,?

這應該是它。

+0

感謝您花時間回答我的問題。我已經到了可以創建記錄集然後讓我的下一個任務運行存儲過程的地步,但我無法弄清楚如何在存儲過程中操作對象。你有一個例子或鏈接?我看到的一切都是關於使用新記錄集而不是存儲過程。 – joe

+0

您需要使用ForEach循環遍歷記錄集的每一行。來自RS列的數據將被傳遞給每個列的變量 - 一次一行。然後,將這些變量提供給SQL任務。 – Stoleg