Partager via


sp_get_query_template

Retourne la forme paramétrée d'une requête. Les résultats retournés simulent la forme paramétrée d'une requête obtenue à l'aide de forced parameterization. sp_get_query_template sert essentiellement à créer des repères de plan TEMPLATE.

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe

sp_get_query_template
   [ @querytext = ] N'query_text'         
      , @templatetext OUTPUT 
      , @parameters OUTPUT 

Arguments

  • 'query_text'
    Requête dont la version paramétrée doit être générée. 'query_text' doit être placé entre guillemets simples et précédé du spécificateur Unicode N. N'query_text' représente la valeur affectée au paramètre @querytext. Celui-ci est de type nvarchar(max).
  • @templatetext
    Paramètre de sortie de type nvarchar(max), fourni tel qu'indiqué, permettant de recevoir la forme paramétrée de query_text en tant que littéral de chaîne.
  • @parameters
    Paramètre de sortie de type nvarchar(max), fourni tel qu'indiqué, permettant de recevoir un littéral de chaîne des noms de paramètres et des types de données qui ont été paramétrés dans @templatetext.

Notes

sp_get_query_template retourne une erreur dans les cas suivants :

  • Elle ne paramètre aucune valeur littérale de constante dans query_text.
  • query_text a pour valeur NULL, n'est pas une chaîne Unicode, présente une syntaxe incorrecte ou ne peut pas être compilé.

Si sp_get_query_template retourne une erreur, elle ne modifie pas les valeurs des paramètres de sortie @templatetext et @parameters.

Autorisations

Nécessite l'appartenance au rôle de base de données public.

Exemples

L'exemple suivant retourne la forme paramétrée d'une requête qui contient deux valeurs littérales de constante.

USE AdventureWorks;
GO
DECLARE @my_templatetext nvarchar(max)
DECLARE @my_parameters nvarchar(max)
EXEC sp_get_query_template 
    N'SELECT pi.ProductID, SUM(pi.Quantity) AS Total
        FROM Production.ProductModel pm 
        INNER JOIN Production.ProductInventory pi
        ON pm.ProductModelID = pi.ProductID
        WHERE pi.ProductID = 2
        GROUP BY pi.ProductID, pi.Quantity
        HAVING SUM(pi.Quantity) > 400',
@my_templatetext OUTPUT,
@my_parameters OUTPUT;
SELECT @my_templatetext;
SELECT @my_parameters;

Voici les résultats paramétrés du paramètre @my_templatetext``OUTPUT :

select pi . ProductID , SUM ( pi . Quantity ) as Total from Production . ProductModel pm inner join Production . ProductInventory pi on pm . ProductModelID = pi . ProductID where pi . ProductID = @0 group by pi . ProductID , pi . Quantity having SUM ( pi . Quantity ) > 400

Le premier littéral de constante, 2, est converti en un paramètre. Le second littéral, 400, n'est pas converti car il se trouve dans une clause HAVING. Les résultats retournés par sp_get_query_template simulent la forme paramétrée d'une requête lorsque l'option PARAMETERIZATION de ALTER DATABASE a pour valeur FORCED. Pour connaître les variables paramétrées dans ces conditions, consultez Paramétrage forcé.

Voici les résultats paramétrés du paramètre @my_parameters``OUTPUT :

@0 int
ms186908.note(fr-fr,SQL.90).gifRemarque :
L'ordre et la dénomination des paramètres dans la sortie de sp_get_query_template peuvent varier suivant les correctifs QFE, les Service Packs et les mises à niveau de version de SQL Server. Les mises à niveau peuvent provoquer le paramétrage d'un ensemble différent de littéraux de constante pour la même requête et l'application d'un espacement différent dans les résultats de deux paramètres de sortie.

Voir aussi

Référence

Procédures stockées système (Transact-SQL)
Procédures stockées du moteur de base de données (Transact-SQL)

Autres ressources

Indication du comportement du paramétrage de requêtes grâce aux repères de plan
Conception de repères de plan pour les requêtes paramétrées

Aide et Informations

Assistance sur SQL Server 2005