SR0013 : Le paramètre de sortie (paramètre) n'est pas spécifié dans tous les chemins de code

Id de la règle

SR0013

Catégorie

Microsoft.CSharp

Modification avec rupture

Sans rupture

Cause

Vos paramètres de sortie ne sont pas initialisés dans tous les chemins de code possibles d'une procédure stockée ou d'une fonction.

Description de la règle

Cette règle identifie le code dans lequel le paramètre de sortie n'a pas de valeur dans un ou plusieurs chemins de code via la procédure stockée ou la fonction. Cette règle n'identifie pas dans quels chemins d'accès le paramètre de sortie doit être défini. Si plusieurs paramètres de sortie ont ce problème, un avertissement s'affiche pour chaque paramètre.

Comment corriger les violations

Vous pouvez corriger ce problème de deux façons. Vous pouvez résoudre ce problème très facilement si vous initialisez les paramètres de sortie à une valeur par défaut au début du corps de la procédure. Vous pouvez également affecter au paramètre de sortie une valeur dans les chemins d'accès de code spécifique dans lesquels le paramètre n'est pas défini. Toutefois, vous pouvez négliger un chemin de code rare dans une procédure complexe.

Important

La spécification d'une valeur dans la déclaration de procédure, telle que CREATE PROC MyProcedure (@param1 INT = 10 OUTPUT) ne résoudra pas le problème. Vous devez assigner une valeur au paramètre de sortie dans le corps de la procédure.

Quand supprimer les avertissements

Vous ne devez pas supprimer cet avertissement. La meilleure pratique consiste à toujours affecter une valeur à vos paramètres de sortie. Si une valeur indéterminée est retournée, les résultats inattendus peuvent affecter de façon défavorable le code qui appelle la fonction ou procédure stockée.

Exemple

L'exemple suivant montre deux procédures simples. La première procédure ne définit pas la valeur du paramètre de sortie, @Sum. La deuxième procédure initialise le paramètre @Sum au démarrage de la procédure, ce qui garantit que la valeur sera définie dans tous les chemins de code.

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

Voir aussi

Concepts

Analyse du code de base de données pour en améliorer la qualité