1

我有这样的场景:

我需要传递@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”开始。错误:0x0 在 CMD 审核 OnPreExecute:没有结果行集与此查询的执行相关联。错误:CMD 审核 OnPreExecute 时出现 0xC002F309,执行 SQL 任务:为变量“key”分配值时出错:“HRESULT 异常:0xC0015005”。任务失败:CMD 审核 OnPreExecute


对于同一包的另一次运行,我可以看到另一个错误 SSIS 包“package1.dtsx”启动。错误:事件包上的 0xC001405B 错误:尝试锁定变量“User::key”以进行读取访问时检测到死锁。尝试 16 次后无法获取锁并超时。错误:事件包出错时出现 0xC00291EA,SQL 任务:变量“User::key”不存在。错误:事件包出现错误时出现 0xC0024107:任务验证期间出现错误。警告:OnError 时出现 0x80019002:SSIS 警告代码 DTS_W_MAXIMUMERRORCOUNTREACHED。Execution 方法成功,但引发的错误数 (5) 达到了允许的最大值 (1);导致失败。当错误数量达到 MaximumErrorCount 中指定的数量时,就会发生这种情况。更改 MaximumErrorCount 或修复错误。错误:0x0 测试:没有结果行集与此查询的执行相关联。警告:OnError 时出现 0x80019002:SSIS 警告代码 DTS_W_MAXIMUMERRORCOUNTREACHED。Execution 方法成功,但引发的错误数 (5) 达到了允许的最大值 (1);导致失败。当错误数量达到 MaximumErrorCount 中指定的数量时,就会发生这种情况。更改 MaximumErrorCount 或修复错误。*

请注意 user::key 变量已经被定义

4

2 回答 2

4

我有同样的问题,这个论坛给了我一个提示,我得到了它的工作。在我的存储过程中,我使用了输入参数和输出参数,在 catch 块中我使用了 RETURN 1,我想在过程失败时将其用作结果集。在另一个过程中,它以这种方式工作,但我没有使用输出。

我之前所做的(其中 1 是输入,而 2 是参数映射中的输出):

EXEC procedure ?, ? OUTPUT

当我使用 RETURN 时,我期待它也会给我一个结果(当我在 SSMS T-SQL 中调用该过程时没问题)。但结果是一个错误。

我改变了什么:

EXEC ? = procedure ?, ? OUTPUT

在哪里 ?1 是结果的答案,?2是输入和?3是输出。我在参数映射中使用了所有这些并将 ResultSet 设置为 none。

于 2012-10-23T14:04:28.863 回答
2

您的参数映射应该没问题。您需要将结果集设置为“无”并删除结果集映射。您正在尝试捕获变量中的输出参数并将其设置为结果集。这样做的问题是存储过程中的 sql 不会返回结果。

于 2012-06-20T16:02:50.140 回答