Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.