2012-06-20 59 views
1

我有這樣的情形中,從程序得到一個輸出值:傳遞一個值T-SQL操作,並使用執行SQL任務SSIS

我需要通過@id到存儲過程,並從該@key使用SSIS Execute SQL task過程:

create PROCEDURE lProcedurename 
(@ID int , 
@key int output 
) 
with execute as caller 
as 
set nocount on; 
begin 
BEGIN TRY 
set @key=999 
END TRY 
begin catch 
----some codes 
end catch 
end 

請找到執行SQL任務屬性

結果設置爲單行

我已執行SQL語句(SSIS執行SQL任務級別)的

exec lProcedurename @ID = ? , @key = ? 

參數映射爲

variablename ,direction, data type, parametername ,parameter size 
user::id input long o -1 
user::key output long 1 -1 

結果設置爲

resultname,variablename 
0 user::key 

但當我運行包時它出現錯誤..請讓我知道是屬性設置合作正確嗎?


請參閱錯誤

* SSIS包 「package1.dtsx」 開始。 錯誤:在CMD審計OnPreExecute 0x0:沒有結果行集與此查詢的執行相關聯。 錯誤:0xC002F309在CMD審計OnPreExecute,執行SQL任務:「從HRESULT異常:0xC0015005」,而將值分配給變量「鍵」時發生錯誤。 任務失敗:CMD審計OnPreExecute


爲同一個包,我可以看到另一個錯誤是 SSIS包「package1.dtsx」的另一個運行開始。 錯誤:0xC001405B事件包錯誤:嘗試鎖定變量「User :: key」以進行讀取訪問時檢測到死鎖。經過16次嘗試並超時後無法獲取鎖定。 錯誤:0xC00291EA在事件包發生錯誤時,SQL任務:變量「User :: key」不存在。 錯誤:0xC0024107事件包錯誤:任務驗證期間出現錯誤。 警告:0x80019002在OnError:SSIS警告代碼DTS_W_MAXIMUMERRORCOUNTREACHED。執行方法成功,但引發的錯誤數(5)達到允許的最大值(1);導致失敗。當錯誤數量達到MaximumErrorCount中指定的數量時會發生這種情況。更改MaximumErrorCount或修復錯誤。 錯誤:測試時出現0x0:沒有結果行集與執行此查詢相關聯。 警告:0x80019002在OnError:SSIS警告代碼DTS_W_MAXIMUMERRORCOUNTREACHED。執行方法成功,但引發的錯誤數(5)達到允許的最大值(1);導致失敗。當錯誤數量達到MaximumErrorCount中指定的數量時會發生這種情況。更改MaximumErrorCount或修正錯誤。*

請注意的是,用戶::關鍵變量已被定義

回答

2

你的參數映射應該罰款。您需要將結果集設置爲「無」並刪除結果集映射。您正試圖在變量中捕獲輸出參數並將其設置爲結果集。這個問題是你的存儲過程中的sql不會返回結果。

4

我有同樣的問題,這個論壇給了我一個提示,我得到它的工作。 在我的存儲過程中,我使用了輸入參數和輸出參數,並在catch塊中使用了RETURN 1,我想在過程失敗時用作結果集。在另一個過程中,它以這種方式工作,但在那裏我沒有使用輸出。

我之前所做的(其中1是輸入和2個輸出參數映射?):

EXEC procedure ?, ? OUTPUT 

,我期待它給了我一個結果太當我使用RETURN(這是確定,當我在SSMS T-SQL中調用了該過程)。但結果是一個錯誤。

我改變什麼:

EXEC ? = procedure ?, ? OUTPUT 

在哪裏? 1是RESULT的答案,? 2是輸入和? 3輸出。我將它們全部用於參數映射,並將ResultSet設置爲無。