这是我的 sproc 的简化版本:
CREATE PROCEDURE usp_AddSomething
@i_input1 int,
@o_output1 int = 1 OUTPUT,
@o_output2 int = 2 OUTPUT
AS
-- Do stuff
如果我没有为sproc@o_output1
或@o_output2
在 sproc 内显式设置值,那么我希望看到默认输出值 1 和 2。当我EXEC usp_AddSomething ...
从普通 SQL 脚本调用时,它会以这种方式工作。但是,当我在 SSIS SQL 任务中运行相同的语句时,如下所示:
EXEC ? = usp_AddSomething
@i_input1 = ?,
@o_output1 = ? OUTPUT,
@o_output2 = ? OUTPUT
我得到看似随机的值(例如 15305391 和 69085360),而不是默认的 1 和 2。
但是,如果值在存储过程中的某处显式设置,如下所示:
...
SELECT @o_output1 = 1
SELECT @o_output2 = 2
RETURN 0
然后我在 SSIS 中得到 1 和 2 的期望值。
我的 SSIS 变量是 Int32,SQL 任务上的参数映射使用 LONG,并且序号位置(即 0、1、2)在参数名称下正确设置。
冗余初始化输出参数的值以匹配它们的默认值很容易,但我真的很想知道为什么它不起作用。也许另一个古怪的 SSIS 事情?SQL Server 2005 SP4。