Partager via


SR0006 : Déplacez une référence de colonne vers un côté d'un opérateur de comparaison pour utiliser un index de colonne

Id de la règle

SR0006

Catégorie

Microsoft.Performance

Modification avec rupture

Modification sans rupture

Cause

Dans le cadre d'une comparaison, une expression contient une référence de colonne.

Description de la règle

Votre code peut provoquer une analyse de table s'il compare une expression qui contient une référence de colonne.

Comment corriger les violations

Pour résoudre ce problème, vous devez retravailler la comparaison afin que la référence de colonne s'affiche seule d'un côté de l'opérateur de comparaison et non dans une expression. Lorsque vous exécutez le code qui fait figurer la référence de colonne seule d'un côté de l'opérateur de comparaison, SQL Server peut utiliser l'index de la colonne, et aucune analyse de table n'est exécutée.

Quand supprimer les avertissements

Vous pouvez supprimer cet avertissement si la table dont la colonne est comparée ne contient que quelques lignes.

Exemple

Dans la première procédure, une clause WHERE inclut la colonne [c1] dans une expression dans le cadre d'une comparaison. Dans la deuxième procédure, les résultats de la comparaison seront identiques mais ne requerront jamais une analyse de table.

CREATE PROCEDURE [dbo].[Procedure3WithWarnings]
@param1 int
AS
SELECT [c1], [c2], [c3], [Comment] 
FROM [dbo].[Table2]  
WHERE ([c1] + 5 > @param1)

CREATE PROCEDURE [dbo].[Procedure3Fixed]
@param1 int
AS
SELECT [c1], [c2], [c3], [Comment] 
FROM [dbo].[Table2]  
WHERE ([c1] > (@param1 - 5))

Voir aussi

Concepts

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