次の方法で共有


SR0013: 出力パラメータ (パラメータ名) はすべてのコード パスに設定されていません

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

参照

概念

スタティック分析によるデータベース コードの改善