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