4

「0」で初期化する出力パラメータを持つストアド プロシージャがあります。

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

ただし、プロシージャが実行中にそのパラメータを変更または設定しない場合、出力値は期待どおりの「0」ではなく、NULL になります。

プロシージャコードにデフォルト値を設定することは必須ですか?

SET @someparam = 0; 

宣言での初期化を回避しますか?

なぜSQL Serverが出力パラメータの宣言でデフォルト値を許可するのですか?

4

1 に答える 1

10

表示する構文は初期化用ではなく、欠落しているパラメーターのデフォルト値用です。

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
于 2012-11-14T10:13:21.707 に答える