Paramétrage simple

Dans SQL Server, l'utilisation de paramètres ou de marqueurs de paramètres dans les instructions Transact-SQL augmente la capacité du moteur relationnel à associer les nouvelles instructions SQL aux plans d'exécution préalablement compilés existants.

Remarque relative à la sécuritéRemarque relative à la sécurité

L'utilisation de paramètres ou de marqueurs de paramètre pour stocker des valeurs tapées par des utilisateurs finaux est plus sécurisée que la concaténation des valeurs dans une chaîne exécutée ensuite à l'aide d'une méthode d'API d'accès aux données, de l'instruction EXECUTE ou de la procédure stockée sp_executesql.

Si vous exécutez une instruction SQL sans paramètres, SQL Server paramètre cette instruction en interne afin d'augmenter la possibilité de l'associer à un plan d'exécution existant. Ce processus est appelé « paramétrage simple ». Dans SQL Server 2000, le processus était désigné par le terme « autoparamétrage ».

Imaginons l'instruction suivante :

SELECT * FROM AdventureWorks2008R2.Production.Product 
WHERE ProductSubcategoryID = 1;

Vous pouvez spécifier comme paramètre la valeur 1 de la fin de l'instruction. Le moteur relationnel génère le plan d'exécution pour ce lot comme si un paramètre avait été spécifié au lieu de la valeur 1. En raison de ce paramétrage simple, SQL Server reconnaît que les deux instructions suivantes génèrent essentiellement le même plan d'exécution et réutilisent le premier plan pour la deuxième instruction :

SELECT * FROM AdventureWorks2008R2.Production.Product 
WHERE ProductSubcategoryID = 1;

SELECT * FROM AdventureWorks2008R2.Production.Product 
WHERE ProductSubcategoryID = 4;

Lors du traitement d'instructions SQL complexes, il est possible que le moteur relationnel rencontre certaines difficultés pour déterminer les expressions qui peuvent être paramétrées. Afin d'augmenter la capacité du moteur relationnel à associer des instructions SQL complexes à des plans d'exécution existants et inutilisés, spécifiez les paramètres de manière explicite à l'aide de sp_executesql ou de marqueurs de paramètres. Pour plus d'informations, consultez Réutilisation des paramètres et des plans d'exécution.

Notes

Lorsque les opérateurs arithmétiques +, -, *, / ou % sont utilisés pour réaliser une conversion implicite ou explicite de valeurs constantes int, smallint, tinyint ou bigint pour les types de données float, real, decimal ou numeric, SQL Server applique des règles spécifiques pour calculer le type et la précision des résultats des expressions. Toutefois, ces règles diffèrent selon que la requête est paramétrée ou non. Par conséquent, dans certains cas, des expressions similaires dans les requêtes peuvent produire des résultats différents. Pour plus d'informations, consultez int, bigint, smallint et tinyint (Transact-SQL).

Avec le comportement par défaut du paramétrage simple, SQL Server paramètre une classe relativement réduite de requêtes. Toutefois, vous pouvez attribuer la valeur FORCED à l'option PARAMETERIZATION de la commande ALTER DATABASE pour spécifier que toutes les requêtes d'une base de données soient paramétrées, sous réserve de certaines contraintes. Cette opération peut améliorer les performances des bases de données soumises à des volumes élevés de requêtes simultanées en réduisant la fréquence des compilations de requête. Pour plus d'informations, consultez Paramétrage forcé.

Une autre solution consiste à spécifier que ne soient paramétrées qu'une requête et toutes autres requêtes dont la syntaxe ne se différencie que par les valeurs des paramètres. Pour plus d'informations, consultez Indication du comportement du paramétrage de requêtes grâce aux repères de plan.

Voir aussi

Référence