SR0013:輸出參數 (參數) 沒有在所有程式碼路徑中填入

RuleId

SR0013

分類

Microsoft.Design

中斷變更

未中斷

原因

在整個預存程序或函式中,您的輸出參數並未在所有可能的程式碼中初始化。

規則描述

這個規則會透過預存程序或函式識別程式碼,該程式碼中的輸出參數未設定為一或多個程式碼路徑中的值。 此規則不會識別應在哪一個路徑中設定輸出參數。 如果多個輸出參數都發生這個問題,便會針對每個參數都出現一則警告。

如何修正違規

您可以利用兩種方式之一修正這個問題。 如果您在程序主體的開頭將輸出參數初始化為預設值,即可輕鬆地修正這個問題。 或者,您也可以將輸出參數設定為特定程式碼路徑中的值 (其中還沒有設定該參數)。 不過,您可能會忽略複雜程序中不常用的程式碼路徑。

重要事項重要事項

指定程序宣告內的值,例如 CREATE PROC MyProcedure (@param1 INT = 10 OUTPUT) 將不會解析問題。 您必須將值指派給程序主體內的輸出參數。

隱藏警告的時機

您不應該隱藏這項警告。 最佳作法是永遠將輸出參數設定為值。 如果傳回不定的值,意外的結果便可能對呼叫預存程序或函式的程式碼造成不利影響。

範例

以下範例顯示兩個簡單的程序。 第一個程序不會設定輸出參數 @Sum 的值。 第二個程序會在程序開端初始化 @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

請參閱

概念

分析資料庫程式碼以改善程式碼品質