这是我一整天都看到的最糟糕的事情。
在SSIS 2005中,我有一个执行SQL任务,它运行一个SQL 2005存储过程,它接受两个IN参数和一个OUTPUT参数。 IN参数是静态的,因此在命令字符串中进行了硬编码。 OUTPUT参数被拉入Int32类型的包变量中(尽管在参数映射页面的执行SQL任务中,它告诉我数据类型是LONG)。
当我运行SQL任务并且输出参数返回值> 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 :(得分:1)
如果像你一样设置sql命令,则应该从结果集中设置变量而不是参数。
将结果集设置为单行,然后在结果集选项卡上将0(如果使用OLEDB)作为结果名称,将变量(即User :: OutputVariable)作为变量名称。
如果你想使用参数,你可以像这样设置你的sql:
EXECUTE MyProc 'param1', 'param2', ? OUTPUT
然后您将转到参数映射选项卡并按如下方式设置参数:
变量名称 - >用户:: OutputVariable
方向 - >输出
数据类型 - >龙
参数名称 - > 0
参数大小 - > -1
注意这适用于在常规选项卡上使用OLEDB作为连接类型。参数的命名方式因使用的连接类型而异。
答案 1 :(得分:0)
你应该说 SELECT吗? = @Out