2009-01-28 64 views
7

我正在遷移必須使用已存在的存儲過程插入的數據。存儲過程具有參數和插入行的id的返回值(來自select語句)。在SSIS中的OLE DB命令中,我可以調用存儲過程傳遞列值作爲參數,我通常在存儲過程中使用輸出參數來處理「id」輸出;但我不確定如何在過程使用select返回id值時使用返回值處理這個問題。下面是我所使用的作品,其前一個例子,但我需要拿起從選擇返回值:OLE DB命令中存儲過程的SSIS返回值

exec dbo.uspInsertContactAddress 
@Address = ?, 
@ContactID = ?, 
@DeliveryMethodId = ?, 
@ID = ? output, 
@Version = ? output 

回答

12

,我發現我能做到這一點這實際上是很簡單的方式:

exec ? = dbo.StoredProc @param = ?, @param2 = ? 

然後@RETURN_VALUE將出現在可用目標列

6

不要在SqlCommand的財產使用的變量名,只是問號和輸出參數的「OUT」或「OUTPUT」標籤。

抓取輸出參數值的技巧是在OLE DB命令前面的管道中放置派生列轉換,以引入列(映射到SSIS變量)以捕獲過程結果。

請參閱OLEDB Command Transformation And Identity Columns瞭解如何執行此操作的屏幕截圖。另請參閱Trash Destination Adapter以瞭解第一個鏈接中使用的垃圾桶目的地。這是一個方便的工具,可用於調試這樣的事情。

+0

感謝您的回答,但也許我沒有」不要在我的問題中解釋我需要做什麼。上面的代碼我用過,如果過程有輸出參數,我可以獲取值。問題是用於該數據庫的過程只是調用select來獲取值。 – bobwah 2009-01-29 08:44:22

0

我一直使用Execute SQL Task中的參數映射取得了很大的成功。 SQL語句是「EXEC nameofstoredproc?,?OUTPUT」,如果參數是輸出,則帶有指定參數位置的問號和OUTPUT。

您可以使用相應的變量名稱,方向(輸入,輸出,ReturnValue)和數據類型指定映射中的參數。由於您的存儲過程正在通過結果集返回所需的數據,因此請指定變量的方向以收集ID和版本作爲ReturnValue。它應該適合你。

1

如果存儲過程返回一個結果,那麼你需要捕獲它:

DECLARE @results TABLE (
    [ID] INT NOT NULL 
) 

INSERT @results ([ID]) 
EXEC dbo.uspInsertContactAddress @Address = ?, @ContactID = ?, @DeliveryMethodId = ?, @ID = ? output, @Version = ? output 

SELECT * FROM @results 

注:我使用的表變量。您可能需要使用臨時表,具體取決於您的SQL Server版本。