Partage 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

Important

Les arguments des procédures stockées étendues doivent être entrés dans l’ordre spécifique, comme décrit dans la section syntaxe. Si les paramètres sont entrés hors ordre, un message d’erreur se produit.

[ @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.