sp_get_query_template (Transact-SQL)

S’applique à :SQL Server

Retourne la forme paramétrable d'une requête. Les résultats retournés simulent la forme paramétrable d'une requête obtenue à l'aide d'un paramétrage forcé. sp_get_query_template est principalement utilisé lorsque vous créez des repères de plan TEMPLATE.

Conventions de la 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étrable doit être générée. 'query_text' doit être placé entre guillemets simples et être précédé du spécificateur N Unicode. N’query_text' est la valeur affectée au @querytext paramètre . Il s’agit de type nvarchar(max).

@templatetext
Paramètre de sortie de type nvarchar(max), fourni comme indiqué, pour recevoir la forme paramétrable de query_text sous forme de littéral de chaîne.

@parameters
Paramètre de sortie de type nvarchar(max), fourni comme indiqué, pour 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.

Remarques

sp_get_query_template retourne une erreur dans les cas suivants :

  • Il ne paramétre aucune valeur littérale constante dans query_text.

  • query_text a la valeur NULL, pas une chaîne Unicode, n’est pas syntaxiquement valide ou ne peut pas être compilée.

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

Autorisations

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

Exemples

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

USE AdventureWorks2022;  
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étrable d'une requête lorsque l'option PARAMETERIZATION de ALTER DATABASE a pour valeur FORCED.

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

@0 int  

Notes

L’ordre et le nommage des paramètres dans la sortie de sp_get_query_template peuvent changer entre l’ingénierie de correctif rapide, le Service Pack et les mises à niveau de version de SQL Server. Les mises à niveau peuvent également 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

Procédures stockées système (Transact-SQL)
Procédures stockées du moteur de base de données (Transact-SQL)
Spécifier le comportement du paramétrage de requêtes grâce aux repères de plan