2009-01-26 47 views
6

如何忽略存储过程的输出参数?我打电话给另一个程序,例如:是否可以忽略存储过程的输出参数?

DECLARE @param1 integer 

EXEC mystoredprocedure 
    @in_param_1, 
    @in_param2_, 
    @param1 OUTPUT, 
    -- what do I type here to ignore the second output param?? 

我正在使用T-SQL(MS SQL 2005)。

回答

5

您可以只使用NULL作为最后一个参数,它应该可以正常工作 - 只要该参数对于proc中的输入逻辑也不需要。

在你的情况,你会调用proc用作

exec mystoredproc @in_param_1, @in_param2_, @param1 OUTPUT, null 

再举一例,对于同样的情形......

create proc MyTempProc 
    (@one int, 
    @two int out, 
    @three int out) 
AS 
begin 

    set @two = 2 
    set @three = 3 

    select @one as One 

end 
go 

declare @p1 int, 
     @p2 int 

set  @p1 = 1 

exec MyTempProc @p1, @p2 out, null 

print @p1 
print @p2 
0

您可能不得不忽略OUTPUT参数,只需对该值不做任何操作即可。这不像变量的开销是一个问题或任何事情。这里唯一的问题是你的代码会有点丑陋。所以在那里打一个评论,解释OUTPUT参数没有被使用,一切都应该没问题。

4

输出参数必须有一个默认值才能通过它。见下文

create proc x (@in int = null, @out int = null OUTPUT) 
as 
Begin 
    Select @in 
End 

exec x 1 

EDIT

为了澄清一点,正在返回的错误,因为正在被调用的存储过程具有已定义的参数(在这种情况下@参数1),对于没有缺省被定义为。 (即@param1 int而不是@param int = -1)在调用存储过程时,既没有为存储过程的已定义参数指定参数或默认值,也会发生错误。如果您厌倦了忽略没有指定默认值的输入参数,则会发生同样的情况。

+0

真的,sp *需要*有输出?这对我来说没有多大意义。 – 2009-01-26 21:40:52

0

如果你调用的SP需要一个参数要通过,你必须有一个。即使你忽略了它的输出,它也是SP结构的一部分。

将参数视为“数据合同”。如果他们不是默认的,他们是必需的。即使这些值被忽视。

强制您声明一个您永远不会读的虚拟值是调用该存储过程的成本,可能会被某些需要使用输出参数的值使用。