SR0013: El parámetro de salida (parámetro) no se rellena en todas las rutas de acceso del código

Identificador de regla

SR0013

Categoría

Microsoft.Design

Cambio problemático

Poco problemático

Causa

Los parámetros de salida no se inicializan en todas las rutas de acceso del código posibles en un procedimiento almacenado o una función.

Descripción de la regla

Esta regla identifica el código en el que el parámetro de salida no está establecido en un valor en una o más rutas de acceso del código a través del procedimiento almacenado o la función. Esta regla no identifica en qué rutas de acceso se debe establecer el parámetro de salida. Si varios parámetros de salida tienen este problema, aparecerá una advertencia por parámetro.

Cómo corregir infracciones

Existen dos formas de corregir este problema. Puede corregir este problema fácilmente si inicializa los parámetros de salida a un valor predeterminado en el inicio del cuerpo del procedimiento. Como alternativa, puede establecer también el parámetro de salida en un valor en las rutas de acceso del código concretas en las que no se establece el parámetro. Sin embargo, es posible que pase por alto una ruta de acceso de código poco habitual en un procedimiento complejo.

Nota importanteImportante

Al especificar un valor dentro de la declaración de procedimiento, como CREATE PROC MyProcedure (@param1 INT = 10 OUTPUT), no se resolverá el problema. Debe asignar un valor al parámetro de salida dentro del cuerpo de procedimiento.

Cuándo suprimir advertencias

Esta advertencia no se debe suprimir. Como un procedimiento recomendado, debería establecer siempre sus parámetros de salida en un valor. Si se devuelve un valor indeterminado, los resultados inesperados podrían afectar negativamente al código que llama al procedimiento almacenado o a la función.

Ejemplo

En el ejemplo siguiente se muestran dos procedimientos sencillos. El primer procedimiento no establece el valor del parámetro de salida, @Sum. El segundo procedimiento inicializa el parámetro @Sum en el inicio del procedimiento, lo que asegura que el valor se establecerá en todas las rutas de acceso del código.

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

Vea también

Conceptos

Analizar el código de base de datos para mejorar la calidad del código