Dela via


sp_get_query_template (Transact-SQL)

gäller för:SQL Server

Returnerar den parametriserade formen av en fråga. Resultatet som returnerades efterliknar den parametriserade formen av en fråga som resulterar i att tvingad parameterisering används. sp_get_query_template används främst när du skapar TEMPLATE planguider.

Transact-SQL syntaxkonventioner

Syntax

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

Argument

Viktig

Argument för utökade lagrade procedurer måste anges i den specifika ordning som beskrivs i avsnittet Syntax. Om parametrarna anges i fel ordning visas ett felmeddelande.

[ @querytext = ] N'querytext'

Frågan som den parametriserade versionen ska genereras för. @querytext är nvarchar(max), och måste omges av enkla citattecken och föregås av N Unicode-specificeraren.

@templatetext

En OUTPUT-parameter av typen nvarchar(max), som anges, för att ta emot den parametriserade formen av @querytext som en strängliteral.

@parameters

En utdataparameter av typen nvarchar(max), som anges, för att ta emot en strängliteral av parameternamnen och datatyperna som parametriseras i @templatetext.

Anmärkningar

sp_get_query_template returnerar ett fel när följande inträffar:

  • Den parameteriserar inte några konstanta literalvärden i @querytext.
  • @querytext är NULL, inte en Unicode-sträng, syntaktiskt ogiltig eller kan inte kompileras.

Om sp_get_query_template returnerar ett fel ändras inte värdena för @templatetext och @parameters utdataparametrar.

Behörigheter

Kräver medlemskap i den offentliga databasrollen.

Exempel

I följande exempel returneras den parametriserade formen av en fråga som innehåller två konstanta literalvärden.

USE AdventureWorks2022;
GO

DECLARE @my_templatetext AS NVARCHAR (MAX);
DECLARE @my_parameters AS NVARCHAR (MAX);

EXECUTE 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;

Här är de parametriserade resultaten av parametern @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

Den första konstanta literalen, 2, konverteras till en parameter. Den andra literalen, 400, konverteras inte eftersom den finns i en HAVING-sats. Resultaten som returneras av sp_get_query_template efterliknar den parametriserade formen av en fråga när PARAMETERIZATION alternativet ALTER DATABASE är inställt på FORCED.

Här är de parametriserade resultaten av parametern @my_parameters OUTPUT:

@0 int

Ordningen och namngivning av parametrar i utdata från sp_get_query_template kan ändras mellan snabbkorrigeringstekniker, Service Pack och versionsuppgraderingar av SQL Server. Uppgraderingar kan också orsaka att en annan uppsättning konstanta literaler parametriseras för samma fråga och att olika avstånd tillämpas i resultatet av båda utdataparametrarna.