SR0013:所有代码路径中均未填充输出参数(参数)

规则 ID

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

请参见

概念

分析数据库代码以提高代码质量