Partager via


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 TEMPLATE des repères de plan.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

[ @querytext = ] N’querytext'

Requête pour laquelle la version paramétrable doit être générée. @querytext est nvarchar(max), et doit être placé entre guillemets simples et être précédé du N spécificateur Unicode.

@templatetext

Paramètre OUTPUT de type nvarchar(max), fourni comme indiqué, pour recevoir la forme paramétrable de @querytext en tant que 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 paramétrés dans @templatetext.

Notes

sp_get_query_template retourne une erreur lorsque les éléments suivants se produisent :

  • Elle ne paramétre aucune valeur littérale constante dans @querytext.
  • @querytext est NULL, pas une chaîne Unicode, syntactiquement non valide ou ne peut pas être compilée.

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

autorisations

Nécessite l’appartenance au rôle de base de données publique .

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 constant, est 2converti en paramètre. Le deuxième littéral, 400n’est pas converti, car il se trouve à l’intérieur d’une HAVING clause. Les résultats retournés par sp_get_query_template imiter la forme paramétrable d’une requête lorsque l’option PARAMETERIZATION de ALTER DATABASE la requête est définie FORCEDsur .

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

@0 int

L’ordre et le nommage des paramètres dans la sortie peuvent sp_get_query_template changer entre l’ingénierie des correctifs rapides, 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.