Можно ли игнорировать выходной параметр хранимой процедуры? - PullRequest
7 голосов
/ 27 января 2009

Как я могу игнорировать выходной параметр хранимой процедуры? Я вызываю процедуру из другой процедуры, например ::10000

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 ]

6 голосов
/ 29 января 2009

Вы можете просто использовать NULL в качестве последнего параметра, и он должен работать нормально - если этот параметр также не ожидается для входной логики в 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
4 голосов
/ 27 января 2009

Выходной параметр должен иметь значение по умолчанию, чтобы вы не передавали его. Смотри ниже

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

exec x 1

EDIT

Чтобы уточнить, ошибка возвращается, потому что вызываемая хранимая процедура имеет определенный параметр (в данном случае @ param1), для которого не определено значение по умолчанию. (т. е. @ param1 int, а не @param int = -1) В случае, если для определенного параметра хранимой процедуры при вызове хранимой процедуры не указан ни параметр, ни значение по умолчанию, произойдет ошибка. То же самое произойдет, если вы устали пропускать входной параметр, для которого не задано значение по умолчанию.

0 голосов
/ 29 января 2009

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

Думайте о параметрах как о «контракте данных». Если они не по умолчанию, они необходимы. Даже если значения игнорируются.

Принудительное указание фиктивного значения, которое вы никогда не прочитаете, - это стоимость вызова хранимого процесса, который может использоваться чем-то, что ДОЛЖНО использовать значение выходного параметра.

0 голосов
/ 27 января 2009

Вам, вероятно, придется просто игнорировать параметр OUTPUT, просто ничего не делая со значением. Это не похоже на издержки этой переменной, это проблема или что-то еще. Единственная проблема здесь в том, что ваш код будет немного страшнее. Поэтому добавьте комментарий, объясняющий, что параметр OUTPUT не используется и все должно быть в порядке.

...