2012-06-20 55 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设置为无。