SR0007 : Utilisez ISNULL(colonne, valeur par défaut) sur les colonnes autorisant des valeurs Null dans les expressions
Id de la règle |
SR0007 |
Catégorie |
Microsoft.Performance |
Modification avec rupture |
Modification sans rupture |
Cause
Une fonction ISNULL n'a pas été utilisée dans une expression de comparaison où une colonne pourrait contenir une valeur NULL.
Description de la règle
Si votre code compare deux valeurs de type Null ou une valeur de type Null avec toute autre valeur, votre code retournera un résultat inconnu.
Comment corriger les violations
Vous devez indiquer explicitement comment les valeurs NULL doivent être gérées dans les expressions de comparaison en incluant dans un wrapper chaque colonne qui peut contenir une valeur NULL au sein d'une fonction ISNULL.
Quand supprimer les avertissements
Étant donné que les résultats de la comparaison sont indéterminés, vous ne devriez pas supprimer cet avertissement.
Exemple
Cet exemple montre une définition de table simple et deux procédures stockées. La table contient une colonne, [c2], qui peut contenir une valeur Null. La première procédure, [ProcedureWithWarning], compare [c2] à une valeur de constante. La deuxième procédure résout le problème en incluant [c2] dans un wrapper avec un appel à la fonction ISNULL.
CREATE TABLE [dbo].[Table1]
(
[ID] INT NOT NULL IDENTITY(0, 1),
[c1] INT NOT NULL PRIMARY KEY,
[c2] INT
)
ON [PRIMARY]
CREATE PROCEDURE [dbo].[ProcedureWithWarning]
AS
BEGIN
SELECT COUNT(*) FROM [dbo].[Table1]
WHERE [c2] > 2;
END
CREATE PROCEDURE [dbo].[ProcedureFixed]
AS
BEGIN
SELECT COUNT(*) FROM [dbo].[Table1]
WHERE ISNULL([c2],0) > 2;
END
Voir aussi
Concepts
Analyse du code de base de données pour en améliorer la qualité