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é