Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
Importante |
|---|
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
Importante