RuleId |
SR0013 |
カテゴリ |
Microsoft.Design |
互換性に影響する変更点 |
なし |
原因
出力パラメータが、ストアド プロシージャまたは関数内のすべてのコード パスで初期化されていません。
規則の説明
この規則では、ストアド プロシージャまたは関数内の 1 つ以上のコード パスで出力パラメータの値が設定されていないコードを識別します。 この規則では、出力パラメータを設定する必要があるパスを識別しません。 複数の出力パラメータにこの問題がある場合は、パラメータごとに警告が表示されます。
違反の修正方法
この問題は、次のいずれかの方法で解決できます。 最も簡単な解決方法は、プロシージャの先頭で出力パラメータを既定値に初期化することです。 また、出力パラメータが設定されていない個々のコード パスで、出力パラメータの値を設定することもできます。 ただし、複雑なプロシージャでは、一般的でないコード パスを見落とすおそれがあります。
警告を抑制する状況
この警告は抑制しないでください。 最善の方法は、常に出力パラメータを 1 つの値に設定することです。 不定な値が返される場合、予期しない結果によって、ストアド プロシージャまたは関数を呼び出すコードに悪影響が出ることがあります。
使用例
次の例では、2 つの単純なプロシージャを示します。 最初のプロシージャでは、@Sum 出力パラメータの値を設定していません。 2 番目のプロシージャでは、プロシージャの先頭で @Sum パラメータを初期化しているため、すべてのコード パスでこの値が設定されます。
CREATE PROCEDURE [dbo].[procedureHasWarning]
(
@Value1 BIGINT,
@Value2 INT,
@Value3 INT,
@Sum INT OUTPUT
)
AS
BEGIN
-- No initialization of the output parameter
--
-- Additional statements here.
--
RETURN 0;
END
--
CREATE PROCEDURE [dbo].[procedureFixed]
(
@Value1 BIGINT,
@Value2 INT,
@Value3 INT,
@Sum INT OUTPUT
)
AS
BEGIN
-- Initialize the out parameter
SET @Sum = 0;
--
-- Additional statements here
--
RETURN 0;
END