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