2009-01-26 70 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結構的一部分。

將參數視爲「數據合同」。如果他們不是默認的,他們是必需的。即使這些值被忽視。

強制您聲明一個您永遠不會讀的虛擬值是調用該存儲過程的成本,可能會被某些需要使用輸出參數的值使用。