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

規則 ID

SR0013

分類

Microsoft.Design

互換性に影響する変更点

なし

原因

出力パラメーターが、ストアド プロシージャまたは関数全体のすべての可能なコード パスで初期化されていません。

規則の説明

この規則は、ストアド プロシージャまたは関数での 1 つ以上のコード パスで出力パラメーターの値が設定されていないコードを識別します。 この規則は、出力パラメーターを設定する必要があるパスは識別しません。 複数の出力パラメーターにこの問題がある場合は、パラメーターごとに 1 つの警告が表示されます。

違反の修正方法

この問題は、2 つの方法のいずれかで解決できます。 プロシージャ本体の最初で出力パラメーターを既定値に初期化するのが、最も簡単な解決方法です。 別の方法として、パラメーターが設定されていないコード パスで出力パラメーターの値を設定することもできます。 ただし、複雑なプロシージャの場合、一般的でないコード パスを見逃す可能性があります。

重要

CREATE PROC MyProcedure (@param1 INT = 10 OUTPUT) などのようにプロシージャの宣言で値を指定しても問題は解決しません。 プロシージャ本体の中で出力パラメーターに値を代入する必要があります。

警告を抑制する状況

この警告は抑制しないでください。 推奨される手順は、出力パラメーターの値を常に設定することです。 明確でない値が返された場合、予期しない結果によって、ストアド プロシージャや関数を呼び出すコードに悪影響が出る可能性があります。

使用例

次の例は、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

参照

概念

データベース コードの分析によるコードの品質の向上