如何忽略存储过程的输出参数?我打电话给另一个程序,例如:是否可以忽略存储过程的输出参数?
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)。
如何忽略存储过程的输出参数?我打电话给另一个程序,例如:是否可以忽略存储过程的输出参数?
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)。
您可以只使用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
您可能不得不忽略OUTPUT参数,只需对该值不做任何操作即可。这不像变量的开销是一个问题或任何事情。这里唯一的问题是你的代码会有点丑陋。所以在那里打一个评论,解释OUTPUT参数没有被使用,一切都应该没问题。
输出参数必须有一个默认值才能通过它。见下文
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)在调用存储过程时,既没有为存储过程的已定义参数指定参数或默认值,也会发生错误。如果您厌倦了忽略没有指定默认值的输入参数,则会发生同样的情况。
如果你调用的SP需要一个参数要通过,你必须有一个。即使你忽略了它的输出,它也是SP结构的一部分。
将参数视为“数据合同”。如果他们不是默认的,他们是必需的。即使这些值被忽视。
强制您声明一个您永远不会读的虚拟值是调用该存储过程的成本,可能会被某些需要使用输出参数的值使用。
真的,sp *需要*有输出?这对我来说没有多大意义。 – 2009-01-26 21:40:52