2012-11-14 2 views
4

У меня есть хранимая процедура с выходными параметром, который я инициализировать с «0»:Инициализировать выходные параметров в хранимой процедуре

ALTER PROCEDURE dbo.SomeProcedure 
    @someparam INT = 0 OUT 
... 

Однако, когда процедура не изменяет или установить этот параметр во время выполнения, выходного значение равно NULL, а не «0», как ожидалось.

Обязательно ли установить значение по умолчанию в коде процедуры

SET @someparam = 0; 

и избежать инициализации в декларации?

Почему SQL Server позволяет использовать значения по умолчанию в декларации для выходных параметров?

+1

В * по умолчанию * значения для ** входящих ** только направление - вы можете указать значение по умолчанию для значения происходит в процедуру , Они не влияют на сторону OUTPUT вещей ... так оно и есть –

ответ

7

Синтаксис вы показываете не для инициализации, для default values for missing parameters:

defaultпо умолчанию значение для параметра. Если для параметра задано значение по умолчанию , процедура может быть выполнена без указания значения для этого параметра.

Таким образом, должно быть ясно, что если вы можете прочитать выходное значение, это должно быть так, что вы предоставляете параметр для @someparam, и поэтому он не «отсутствует». Если это не «отсутствует», ему не присваивается значение по умолчанию, поскольку оно должно уже иметь значение, одно из вашего кадра вызывающего абонента (возможно, NULL). QED.

Следующий код показывает разницу и иллюстрирует поведение, которое вы видите:

create procedure usp_test 
    @p int = 0 output 
as 
    set @p += 1; 
    select @p; 
go 

exec usp_test; 
go 


declare @unitialized int; 
exec usp_test @unitialized output; 
go 
Смежные вопросы