如何忽略存儲過程的輸出參數?我打電話給另一個程序,例如:是否可以忽略存儲過程的輸出參數?
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