是否可以忽略存储过程的输出参数?

时间:2009-01-26 21:30:52

标签: sql sql-server-2005 tsql stored-procedures

如何忽略存储过程的输出参数?我正在从另一个程序调用该程序,例如:

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)。

4 个答案:

答案 0 :(得分:6)

你可以使用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

答案 1 :(得分:4)

输出参数必须具有默认值才能使您不通过它。见下文

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

exec x 1

修改

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

答案 2 :(得分:0)

你可能不得不自己忽略OUTPUT参数,只是不对值做任何事情。它不像是变量的开销是一个问题或任何事情。这里唯一的问题是你的代码会有点丑陋。所以在那里发表评论说明OUTPUT参数没有被使用,一切都应该没问题。

答案 3 :(得分:0)

如果你正在调用的SP需要传递一个参数,那么你必须有一个参数。即使你忽略它的输出,它也是SP结构的一部分。

将参数视为“数据合约”。如果他们没有违约,他们就是必需的。即使忽略这些价值观。

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