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 beim Erstellen von TEMPLATE-Planhandbüchern verwendet.

Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

"query_text"
Die Abfrage, für die die parametrisierte Version erzeugt werden soll. "query_text" muss in einfache Anführungszeichen eingeschlossen sein und dem N Unicode-Bezeichner vorangestellt sein. N'query_text' ist der dem Parameter zugewiesene @querytext Wert. Dies ist vom Typ nvarchar(max).

@templatetext
Ist ein Ausgabeparameter vom Typ nvarchar(max), der wie angegeben bereitgestellt wird, um die parametrisierte Form von query_text als Zeichenfolgenliteral zu empfangen.

@parameters
Ist ein Ausgabeparameter vom Typ nvarchar(max), der wie angegeben bereitgestellt wird, um ein Zeichenfolgenliteral der Parameternamen und Datentypen zu empfangen, die in @templatetextparametrisiert wurden.

Bemerkungen

Der Parameter sp_get_query_template gibt in folgenden Situationen einen Fehler zurück:

  • Es parametrisiert keine konstanten Literalwerte in query_text.

  • query_text ist NULL, keine Unicode-Zeichenfolge, syntaktisch ungültig oder kann nicht kompiliert werden.

Wenn sp_get_query_template einen Fehler zurückgibt, werden die Werte der Ausgabeparameter und @parameters nicht @templatetext 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

Beachten Sie, dass das erste konstante Literal, 2, in einen Parameter konvertiert wird. Das zweite Literal, 400, wird nicht konvertiert, da es sich in einer HAVING-Klausel befindet. Die von sp_get_query_template zurückgegebenen Ergebnisse imitieren das parametrisierte Format einer Abfrage, wenn die PARAMETERIZATION-Option von ALTER DATABASE auf FORCED festgelegt wird.

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

@0 int  

Hinweis

Die Reihenfolge und Benennung von Parametern in der Ausgabe von sp_get_query_template kann sich zwischen Schnellkorrekturen, 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.

Weitere Informationen

Gespeicherte Systemprozeduren (Transact-SQL)
Gespeicherte Prozeduren für die Datenbank-Engine (Transact-SQL)
Angeben des Abfrageparametrisierungsverhaltens mithilfe von Planhinweislisten