I have a stored procedure with an output parameter that I initialize with "0":
ALTER PROCEDURE dbo.SomeProcedure
@someparam INT = 0 OUT
...
However, when the procedure does not modify or set that parameter during execution, the output value is NULL, not "0" as expected.
Is it mandatory to set the default value in the procedure code
SET @someparam = 0;
and avoid the initialization in declaration?
Why SQL Server allows default values in declaration for output parameters then?
The syntax you show is not for initialization, is for default values for missing parameters:
default
A default value for a parameter. If a default value is defined for a parameter, the procedure can be executed without specifying a value for that parameter.
So then it should be clear that if you can read the output value, it must be the case that you are providing a parameter for @someparam and therefore it is not 'missing'. If is not 'missing', then it is not assigned a default value because it must already have a value, the one from your caller frame (probably NULL). QED.
The following code shows the difference and exemplifies the behavior you see:
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With