Delen via


sp_get_query_template (Transact-SQL)

van toepassing op:SQL Server-

Retourneert de geparameteriseerde vorm van een query. De resultaten die zijn geretourneerd, bootsen de geparameteriseerde vorm van een query na die het resultaat is van geforceerde parameterisatie. sp_get_query_template wordt voornamelijk gebruikt wanneer u TEMPLATE planhandleidingen maakt.

Transact-SQL syntaxisconventies

Syntaxis

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

Argumenten

Belangrijk

Argumenten voor uitgebreide opgeslagen procedures moeten worden ingevoerd in de specifieke volgorde, zoals beschreven in de sectie Syntaxis. Als de parameters niet in de volgorde zijn ingevoerd, treedt er een foutbericht op.

[ @querytext = ] N'querytekst'

De query waarvoor de geparameteriseerde versie moet worden gegenereerd. @querytext is nvarchar(max)en moet tussen enkele aanhalingstekens staan en worden voorafgegaan door de N Unicode-aanduiding.

@templatetext

Een UITVOERparameter van het type nvarchar(max), opgegeven zoals aangegeven, om de geparameteriseerde vorm van @querytext te ontvangen als letterlijke tekenreeks.

@parameters

Een uitvoerparameter van het type nvarchar(max), opgegeven zoals aangegeven, om een letterlijke tekenreeks te ontvangen van de parameternamen en gegevenstypen die in @templatetextworden geparameteriseerd.

Opmerkingen

sp_get_query_template retourneert een fout wanneer het volgende optreedt:

  • Er worden geen constante letterlijke waarden in @querytextgeparameteraliseerd.
  • @querytext is NULL, geen Unicode-tekenreeks, syntactisch ongeldig of kan niet worden gecompileerd.

Als sp_get_query_template een fout retourneert, worden de waarden van de @templatetext en @parameters uitvoerparameters niet gewijzigd.

Machtigingen

Vereist lidmaatschap van de openbare databaserol.

Voorbeelden

In het volgende voorbeeld wordt de geparameteriseerde vorm van een query geretourneerd die twee constante letterlijke waarden bevat.

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;

Dit zijn de geparameteriseerde resultaten van de parameter @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

De eerste letterlijke constante, 2, wordt geconverteerd naar een parameter. De tweede letterlijke waarde, 400, wordt niet geconverteerd omdat deze zich in een HAVING-component bevindt. De resultaten die worden geretourneerd door sp_get_query_template de geparameteriseerde vorm van een query nabootsen wanneer de optie PARAMETERIZATION van ALTER DATABASE is ingesteld op FORCED.

Dit zijn de geparameteriseerde resultaten van de parameter @my_parameters OUTPUT:

@0 int

De volgorde en naamgeving van parameters in de uitvoer van sp_get_query_template kunnen veranderen tussen quick-fix engineering, servicepack en versie-upgrades van SQL Server. Upgrades kunnen er ook voor zorgen dat een andere set constante letterlijke waarden wordt geparameteriseerd voor dezelfde query en dat er verschillende afstand wordt toegepast in de resultaten van beide uitvoerparameters.