2009-01-26 22 views

Respuesta

5

Puede usar NULL como el último parámetro, y debería funcionar bien, siempre que ese parámetro no se espera para la lógica de entrada en el proceso también.

En su caso, que se podría llamar el proc como

exec mystoredproc @in_param_1, @in_param2_, @param1 OUTPUT, null 

He aquí otro ejemplo de que para el mismo escenario ...

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

Probablemente tendrá que ignorar el parámetro de SALIDA usted mismo simplemente por no hacer nada con el valor. No es que la sobrecarga de esa variable sea un problema ni nada. El único problema aquí es que su código será un poco más feo. Así que haga un comentario explicando que el parámetro OUTPUT no se está usando y que todo debería estar bien.

4

El parámetro de salida debe tener un valor predeterminado para que no lo pase. Véase más adelante

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

exec x 1 

EDITAR

Para aclarar un poco, está siendo devuelto el error debido a que el procedimiento almacenado que se está llamando tiene un parámetro definido (en este caso @ param1), para los que no tiene valor predeterminado se define. (es decir, @ param1 int en lugar de @param int = -1) En el caso en que no se especifique un parámetro o predeterminado para un parámetro definido de un procedimiento almacenado al llamar al procedimiento almacenado, se producirá un error. Lo mismo sucedería si te cansaste de omitir un parámetro de entrada que no tiene un valor predeterminado especificado.

+0

Realmente, el sp * necesita * tener una salida? Eso no tiene mucho sentido para mí. –

+0

Tal vez sería mejor indicar que intentar ejecutar un procedimiento almacenado sin especificar un valor para un parámetro que no tiene un resultado predeterminado en un error, independientemente de la dirección del parámetro. – cmsjr

+0

@MrGrieves: Puede tener sentido, IMO. Por supuesto, un procedimiento puede hacer lo que haga independientemente, pero puede no tener sentido hacerlo. Por ejemplo, el procedimiento puede no tener otro resultado que el parámetro de salida, es decir, no cambia ningún estado, simplemente calcule algo. (Lo sé, una función con valores de tabla podría ser más apropiada para esto, y por supuesto una escala si el resultado es un escalar. Aún así) –

0

Si el SP que está llamando espera un parámetro para pasar, tienes que tener uno allí. Incluso si no tiene en cuenta el resultado, es parte de la estructura del SP.

Considere los parámetros como un "Contrato de datos". Si no están en incumplimiento, se requieren. Incluso si los valores no se tienen en cuenta.

Forzándole a declarar un valor ficticio que nunca leerá es el costo de llamar a ese proc almacenado que puede ser utilizado por algo que SÍ necesita utilizar el valor del parámetro de salida.

Cuestiones relacionadas