Freigeben über


sp_get_query_template (Transact-SQL)

Gilt für: SQL Server

Gibt das parametrisierte Format einer Abfrage zurück. Die zurückgegebenen Ergebnisse imitieren das parametrisierte Format einer Abfrage, das aus der Verwendung von erzwungener Parametrisierung resultiert. sp_get_query_template wird in erster Linie verwendet, wenn Sie Planhandbücher erstellen TEMPLATE .

Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

[ @querytext = ] N'querytext'

Die Abfrage, für die die parametrisierte Version generiert werden soll. @querytext ist nvarchar(max) und muss in einfache Anführungszeichen eingeschlossen und dem N Unicode-Bezeichner vorangestellt werden.

@templatetext

Ein OUTPUT-Parameter vom Typ nvarchar(max), angegeben, um die parametrisierte Form von @querytext als Zeichenfolgenliteral zu empfangen.

@parameters

Ein Ausgabeparameter vom Typ nvarchar(max), der wie angegeben angegeben bereitgestellt wird, um ein Zeichenfolgenliteral der Parameternamen und Datentypen zu empfangen, die in @templatetext parametrisiert sind.

Hinweise

sp_get_query_template gibt einen Fehler zurück, wenn Folgendes auftritt:

  • In @querytext werden keine konstanten Literalwerte parametrisiert.
  • @querytext ist NULL, keine Unicode-Zeichenfolge, syntaktisch ungültig oder kann nicht kompiliert werden.

Wenn sp_get_query_template ein Fehler zurückgegeben wird, werden die Werte der @templatetext - und @parameters Ausgabeparameter nicht geändert.

Berechtigungen

Erfordert die Mitgliedschaft in der public -Datenbankrolle.

Beispiele

Das folgende Beispiel gibt das parametrisierte Format einer Abfrage zurück, die zwei konstante literale Werte enthält.

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;

Im Folgenden sehen Sie die parametrisierten Werte des @my_templatetext OUTPUT-Parameters:

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

Das erste Konstanteliteral wird 2in einen Parameter konvertiert. Das zweite Literal wird nicht konvertiert, 400da es sich innerhalb einer HAVING Klausel befindet. Die ergebnisse, die von sp_get_query_template der parametrisierten Form einer Abfrage zurückgegeben werden, wenn die PARAMETERIZATION Option ALTER DATABASE auf FORCED".

Im Folgenden sehen Sie die parametrisierten Werte des @my_parameters OUTPUT-Parameters:

@0 int

Die Reihenfolge und Benennung von Parametern in der Ausgabe sp_get_query_template von kann sich zwischen Quick Fix Engineering, Service Pack und Versionsupgrades von SQL Server ändern. Upgrades können auch bewirken, dass eine andere Gruppe mit konstanten Literalen für dieselbe Abfrage parametrisiert und unterschiedliche Abstände auf die Ergebnisse beider Ausgabeparameter angewendet werden.