2009-03-03 62 views
1

這是我見過的最愚蠢的事情。SSIS執行SQL任務輸出參數-1沒有顯示正確

在SSIS 2005中,我有一個執行SQL任務,它運行一個SQL 2005存儲過程,該過程需要兩個IN參數和一個OUTPUT參數。 IN參數是靜態的,所以在命令字符串中被硬編碼。 OUTPUT參數被拖入Int32類型的包變量中(儘管在參數映射頁面上的執行SQL任務中告訴我數據類型爲LONG)。

當我運行SQL Task並且輸出參數返回大於0的值(如2)時,變量將填充爲2.當我運行SQL任務並且輸出參數返回-1時,包變量填充了一些值,如66682316.我可以在SSMS中運行proc,並且如果該值預填充爲-1,則它會返回-1給我。

DECLARE @out int 

SET @out = -1 

EXECUTE MyProc 'param1', 'param2', @out OUTPUT 

SELECT @out -- returns -1 

有沒有人知道爲什麼它會返回這個值而不是-1?我確定我的變量是Int32而不是UInt32。

回答

0

你要說的東西

SELECT? = @Out

1

如果你像你一樣設置你的sql命令,你應該從結果集中設置你的變量而不是參數。

將結果集設置爲單行,然後在結果集選項卡中將0(如果使用OLEDB)作爲結果名稱和變量(即User :: OutputVariable)作爲變量名稱。

如果你想使用的參數,你會設置你的SQL像這樣:

EXECUTE MyProc 'param1', 'param2', ? OUTPUT 

然後你會去到參數映射選項卡並設置參數如下:
變量名稱 - >用戶:: OutputVariable
方向 - >輸出
數據類型 - >龍
參數名稱 - > 0
參數尺寸 - > -1

注意這適用於使用OLEDB作爲常規選項卡上的連接類型。參數的命名方式因使用的連接類型而異。