Teilen über


sp_create_plan_guide (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL verwaltete Instanz

Erstellt eine Planhinweisliste für die Zuordnung von Abfragehinweisen oder tatsächlichen Abfrageplänen zu Abfragen in einer Datenbank. Weitere Informationen zu Planhinweislisten finden Sie unter Planhinweislisten.

Transact-SQL-Syntaxkonventionen

Syntax

sp_create_plan_guide [ @name = ] N'plan_guide_name'  
    , [ @stmt = ] N'statement_text'  
    , [ @type = ] N'{ OBJECT | SQL | TEMPLATE }'  
    , [ @module_or_batch = ]  
      {   
                    N'[ schema_name. ] object_name'  
        | N'batch_text'  
        | NULL  
      }  
    , [ @params = ] { N'@parameter_name data_type [ ,...n ]' | NULL }   
    , [ @hints = ] { N'OPTION ( query_hint [ ,...n ] )'   
                 | N'XML_showplan'  
                 | NULL }  

Argumente

[ @name = ] N'plan_guide_name'
Der Name der Planhinweisliste. Die Gültigkeit der Namen von Planhinweislisten beschränkt sich auf die aktuelle Datenbank. plan_guide_name müssen die Regeln für Bezeichner einhalten und können nicht mit dem Nummernzeichen (#) beginnen. Die maximale Länge von plan_guide_name beträgt 124 Zeichen.

[ @stmt = ] N'statement_text'
Handelt es sich um eine Transact-SQL-Anweisung zum Erstellen eines Planleitfadens. Wenn der SQL Server-Abfrageoptimierer eine Abfrage erkennt, die statement_text entspricht, wird plan_guide_name wirksam. Damit die Erstellung eines Planleitfadens erfolgreich ist, muss statement_text im durch die Parameter @type, @module_or_batch und @params angegebenen Kontext angezeigt werden.

statement_text müssen auf eine Weise bereitgestellt werden, mit der der Abfrageoptimierer mit der entsprechenden Anweisung übereinstimmt, die innerhalb des durch @module_or_batch und @params identifizierten Batch- oder Moduls angegeben ist. Weitere Informationen finden Sie im Abschnitt "Hinweise". Die Größe von statement_text ist nur durch den verfügbaren Arbeitsspeicher des Servers begrenzt.

[@type = ] N'{ OBJEKT | SQL | TEMPLATE }'
Ist der Typ der Entität, in der statement_text angezeigt wird. Dadurch wird der Kontext für den Abgleich von statement_text zum plan_guide_name angegeben.

OBJECT
Gibt an , statement_text im Kontext einer gespeicherten Transact-SQL-Prozedur, skalaren Funktion, mehrwertigen Funktion oder Transact-SQL-DML-Trigger in der aktuellen Datenbank angezeigt wird.

SQL
Gibt an , statement_text im Kontext einer eigenständigen Anweisung oder eines Batches angezeigt wird, die über einen beliebigen Mechanismus an SQL Server übermittelt werden können. Transact-SQL-Anweisungen, die von ClR-Objekten (Common Language Runtime) oder erweiterten gespeicherten Prozeduren oder mithilfe von EXEC N'sql_string' übermittelt werden, werden als Batches auf dem Server verarbeitet und sollten daher als @type = "SQL" identifiziert werden. Wenn SQL angegeben ist, wird der Abfragehinweis PARAMETERIZATION { FORCED | SIMPLE } kann im @hints-Parameter nicht angegeben werden.

VORLAGE
Gibt an, dass die Plananleitung für jede Abfrage gilt, die auf das in statement_text angegebene Formular parametrisiert wird. Wenn DIE VORLAGE angegeben ist, wird nur die PARAMETERISIERUNG { FORCED | DER SIMPLE }-Abfragehinweis kann im parameter @hints angegeben werden. Weitere Informationen zu VORLAGENplanhandbüchern finden Sie unter Angeben des Abfrageparameterverhaltens mithilfe von Planhandbüchern.

[@module_or_batch =] { N'[ schema_name. ] object_name' | N'batch_text' | NULL }
Gibt entweder den Namen des Objekts an, in dem statement_text angezeigt wird, oder den Batchtext, in dem statement_text angezeigt wird. Der Batchtext darf keine USE-Datenbank-Anweisung enthalten.

Damit ein Planleitfaden einem von einer Anwendung übermittelten Batch entspricht, muss batch_text im gleichen Format wie zeichenweise bereitgestellt werden, wie er an SQL Server übermittelt wird. Es findet keine interne Konvertierung zur Vereinfachung dieses Abgleichs statt. Weitere Informationen finden Sie im Abschnitt Hinweise.

[schema_name.] object_name gibt den Namen einer gespeicherten Transact-SQL-Prozedur, skalaren Funktion, mehrwertigen Funktion oder Transact-SQL-DML-Trigger an, der statement_text enthält. Wenn schema_name nicht angegeben ist, verwendet schema_name das Schema des aktuellen Benutzers. Wenn NULL angegeben und @type = 'SQL' ist, wird der Wert von @module_or_batch auf den Wert von @stmt festgelegt. Wenn @type = 'TEMPLATE**'**, muss @module_or_batch NULL sein.

[ @params = ] { N'@parameter_name data_type [ ,... n ]' | NULL }
Gibt die Definitionen aller Parameter an, die in statement_text eingebettet sind. @params gilt nur, wenn eine der folgenden Bedingungen zutrifft:

  • @type = 'SQL' oder 'TEMPLATE'. Wenn 'TEMPLATE', darf @params nicht NULL sein.

  • statement_text wird mithilfe und sp_executesql ein Wert für den parameter @params angegeben, oder SQL Server sendet intern eine Anweisung nach der Parameterisierung. Die Übermittlung parametrisierter Abfragen von Datenbank-APIs (einschließlich ODBC, OLE DB und ADO.NET) werden SQL Server als Aufrufe sp_executesql oder API-Servercursorroutinen angezeigt. Daher können sie auch von SQL- oder TEMPLATE-Planhandbüchern abgeglichen werden.

@parameter_name data_type muss im genauen Format angegeben werden, das an SQL Server übermittelt wird, entweder mithilfe sp_executesql oder intern nach der Parametrierung. Weitere Informationen finden Sie im Abschnitt Hinweise. Wenn der Batch keine Parameter enthält, muss NULL angegeben werden. Die Größe von @params ist nur durch den verfügbaren Serverspeicher begrenzt.

[@hints = ] { N'OPTION (query_hint [ ,... n ] )' | N'XML_showplan' | NULL }
N'OPTION (query_hint [ ,... n ] )
Gibt eine OPTION-Klausel an, die einer Abfrage zugeordnet werden soll, die @stmt entspricht. @hints müssen syntaktisch mit einer OPTION-Klausel in einer SELECT-Anweisung identisch sein und eine beliebige gültige Abfolge von Abfragehinweisen enthalten.

N'XML_showplan'
Dies ist der Abfrageplan im XML-Format, der als Hinweis angewendet werden soll.

Es wird empfohlen, den XML-Showplan einer Variable zuzuweisen; andernfalls müssen Sie alle einfachen Anführungszeichen im Showplan abgrenzen, indem Sie ihnen ein weiteres einfaches Anführungszeichen voranstellen. Siehe Beispiel E.

NULL
Gibt an, dass ein vorhandener Hinweis, der in der OPTION-Klausel angegeben ist, nicht auf die Abfrage angewendet wird. Weitere Informationen finden Sie unter OPTION-Klausel (Transact-SQL).For more information, see OPTION Clause (Transact-SQL).

Hinweise

Die Argumente für sp_create_plan_guide müssen in der angezeigten Reihenfolge bereitgestellt werden. Wenn Sie Werte für die Parameter von sp_create_plan_guideangeben, müssen entweder alle oder überhaupt keine Parameternamen explizit angegeben werden. Wird z. B. @name = angegeben, müssen auch @stmt = , @type =, usw. angegeben werden. Ebenso dürfen, wenn @name = nicht angegeben und nur der Parameterwert bereitgestellt wird, die übrigen Parameterwerte ebenfalls nicht angegeben und nur ihre Werte bereitgestellt werden. Argumentnamen dienen nur zu Beschreibungszwecken, zum besseren Verständnis der Syntax. SQL Server überprüft nicht, ob der angegebene Parametername dem Namen für den Parameter an der Position entspricht, an der der Name verwendet wird.

Sie können mehr als eine Planhinweisliste des Typs OBJECT oder SQL für dieselbe Abfrage und den Batch oder das Modul erstellen. Es kann jedoch nur jeweils eine Planhinweisliste aktiviert sein.

Planhinweislisten vom Typ OBJECT können nicht für einen @module_or_batch-Wert erstellt werden, der auf eine gespeicherte Prozedur, Funktion oder einen DML-Trigger verweist, in der bzw. dem die WITH ENCRYPTION-Klausel angegeben wird oder die bzw. der temporär ist.

Das Löschen oder Ändern einer Funktion, einer gespeicherten Prozedur oder eines DML-Triggers, auf die bzw. den in einer Planhinweisliste verwiesen wird, verursacht einen Fehler. Auch der Versuch, eine Tabelle mit einem Trigger zu löschen, auf den eine Planhinweisliste verweist, führt zu einem Fehler.

Hinweis

Planhandbücher können nicht in jeder Edition von Microsoft SQL Server verwendet werden. Eine Liste der Funktionen, die von den SQL Server-Editionen unterstützt werden, finden Sie unter Von den SQL Server 2016-Editionen unterstützte Funktionen. Planhinweislisten sind in jeder Edition sichtbar. Sie können auch in allen Versionen eine Datenbank anfügen, die Planhinweislisten enthält. Planführungslinien bleiben erhalten, wenn Sie eine Datenbank wiederherstellen oder an eine aktualisierte Version von SQL Server anfügen. Nach dem Serverupgrade sollten Sie in jeder Datenbank prüfen, ob die Planhinweislisten wirklich erwünscht sind.

Planleitfaden übereinstimmende Anforderungen

Für Planhandbücher, die @type = 'SQL' oder @type = 'TEMPLATE' angeben, um eine Abfrage erfolgreich abzugleichen, die Werte für batch_text und @parameter_name data_type [,... n ] muss im gleichen Format wie die von der Anwendung eingereichten Gegenstücken bereitgestellt werden. Dies bedeutet, dass Sie den Batchtext genau so bereitstellen müssen, wie der SQL Server-Compiler ihn empfängt. Um den tatsächlichen Batch- und Parametertext zu erfassen, können Sie SQL Server Profiler verwenden. Weitere Informationen finden Sie unter Verwenden von SQL Server Profiler zum Erstellen und Testen von Planhandbüchern.

Wenn @type = 'SQL' und @module_or_batch auf NULL festgelegt ist, wird der Wert von @module_or_batch auf den Wert von @stmt festgelegt. Dies bedeutet, dass der Wert für statement_text genau dasselbe Format, Zeichen für Zeichen, wie er an SQL Server übermittelt wird, bereitgestellt werden muss. Es findet keine interne Konvertierung zur Vereinfachung dieses Abgleichs statt.

Wenn SQL Server mit dem Wert von statement_text batch_text und @parameter_name data_type [,... n ], oder wenn @type = **'**OBJECT', an den Text der entsprechenden Abfrage innerhalb object_name, werden die folgenden Zeichenfolgenelemente nicht berücksichtigt:

  • Leerzeichen (Tabstopps, Leerzeichen, Wagenrücklauf oder Zeilenvorschub) innerhalb der Zeichenfolge.

  • Kommentare (-- oder /* */).

  • Nachfolgende Semikolons

Beispielsweise kann SQL Server mit der statement_text Zeichenfolge N'SELECT * FROM T WHERE a = 10' mit dem folgenden batch_text übereinstimmen:

N'SELECT *
FROM T
WHERE a = 10' 

Die gleiche Zeichenfolge würde jedoch nicht mit diesem batch_text übereinstimmen:

N'SELECT * FROM T WHERE b = 10'

SQL Server ignoriert die Wagenrücklauf-, Zeilenvorschub- und Leerzeichen innerhalb der ersten Abfrage. In der zweiten Abfrage wird die Sequenz WHERE b = 10 nicht auf die gleiche Art interpretiert wie WHERE a = 10. Bei der Feststellung der Übereinstimmung wird nach Groß- und Kleinschreibung sowie nach Akzenten unterschieden (selbst wenn die Sortierung der Datenbank die Groß-/Kleinschreibung nicht berücksichtigt), mit Ausnahme von Schlüsselwörtern, bei denen keine Unterscheidung nach Groß-/Kleinschreibung stattfindet. Der Abgleich ist für Leerzeichen vertraulich. Bei der Feststellung der Übereinstimmung wird nicht nach verkürzten Formen von Schlüsselwörtern unterschieden. So werden beispielsweise die Schlüsselwörter EXECUTE, EXEC und execute als gleichwertig angesehen.

Auswirkungen des Planleitfadens auf den Plancache

Wenn Sie eine Planhinweisliste für ein Modul erstellen, wird der Abfrageplan für dieses Modul aus dem Plancache entfernt. Wenn Sie eine Planhinweisliste des Typs OBJECT oder SQL für einen Batch erstellen, wird der Abfrageplan für einen Batch mit demselben Hashwert entfernt. Wenn Sie eine Planhinweisliste des Typs TEMPLATE erstellen, werden alle Batches mit einer Anweisung aus dem Plancache in dieser Datenbank entfernt.

Berechtigungen

Zum Erstellen eines Planleitfadens vom Typ OBJECT ist die Berechtigung für das referenzierte Objekt erforderlich ALTER . Zum Erstellen eines Planleitfadens vom Typ SQL oder TEMPLATE ist die Berechtigung für die aktuelle Datenbank erforderlich ALTER .

Beispiele

A. Erstellen einer Planhinweisliste vom Typ OBJECT für eine Abfrage in einer gespeicherten Prozedur

Im folgenden Beispiel wird eine Planhinweisliste erstellt, die einer im Kontext einer anwendungsbasierten gespeicherten Prozedur ausgeführten Abfrage zugeordnet wird, und der OPTIMIZE FOR-Hinweis auf die Abfrage angewendet.

Dies ist die gespeicherte Prozedur:

IF OBJECT_ID(N'Sales.GetSalesOrderByCountry', N'P') IS NOT NULL  
    DROP PROCEDURE Sales.GetSalesOrderByCountry;  
GO  
CREATE PROCEDURE Sales.GetSalesOrderByCountry   
    (@Country_region nvarchar(60))  
AS  
BEGIN  
    SELECT *  
    FROM Sales.SalesOrderHeader AS h   
    INNER JOIN Sales.Customer AS c ON h.CustomerID = c.CustomerID  
    INNER JOIN Sales.SalesTerritory AS t   
        ON c.TerritoryID = t.TerritoryID  
    WHERE t.CountryRegionCode = @Country_region;  
END  
GO  

Dies ist die für die Abfrage in der gespeicherten Prozedur erstellte Planhinweisliste:

EXEC sp_create_plan_guide   
    @name =  N'Guide1',  
    @stmt = N'SELECT *  
              FROM Sales.SalesOrderHeader AS h   
              INNER JOIN Sales.Customer AS c   
                 ON h.CustomerID = c.CustomerID  
              INNER JOIN Sales.SalesTerritory AS t   
                 ON c.TerritoryID = t.TerritoryID  
              WHERE t.CountryRegionCode = @Country_region',  
    @type = N'OBJECT',  
    @module_or_batch = N'Sales.GetSalesOrderByCountry',  
    @params = NULL,  
    @hints = N'OPTION (OPTIMIZE FOR (@Country_region = N''US''))';  

B. Erstellen einer Planhinweisliste vom Typ SQL für eine eigenständige Abfrage

Im folgenden Beispiel wird eine Plananleitung zum Abgleichen einer Abfrage in einem batch erstellt, der von einer Anwendung übermittelt wird, die die sp_executesql gespeicherte Systemprozedur verwendet.

Dies ist der Batch:

SELECT TOP 1 * FROM Sales.SalesOrderHeader ORDER BY OrderDate DESC;  

Erstellen Sie die folgende Planhinweisliste, damit kein zweiter Plan für die parallele Ausführung für diese Abfrage generiert wird:

EXEC sp_create_plan_guide   
    @name = N'Guide1',   
    @stmt = N'SELECT TOP 1 *   
              FROM Sales.SalesOrderHeader   
              ORDER BY OrderDate DESC',   
    @type = N'SQL',  
    @module_or_batch = NULL,   
    @params = NULL,   
    @hints = N'OPTION (MAXDOP 1)';  

C. Erstellen einer Planhinweisliste vom Typ TEMPLATE für die parametrisierte Form einer Abfrage

Im folgenden Beispiel wird eine Plananleitung erstellt, die mit einer Abfrage übereinstimmt, die mit einem angegebenen Formular parametrisiert wird, und SQL Server leitet SQL Server zur Erzwingung der Parameterisierung der Abfrage. Die folgenden beiden Abfragen sind syntaktisch gleichwertig, unterscheiden sich jedoch in ihren konstanten Literalwerten.

SELECT * FROM AdventureWorks2022.Sales.SalesOrderHeader AS h  
INNER JOIN AdventureWorks2022.Sales.SalesOrderDetail AS d   
    ON h.SalesOrderID = d.SalesOrderID  
WHERE h.SalesOrderID = 45639;  
  
SELECT * FROM AdventureWorks2022.Sales.SalesOrderHeader AS h  
INNER JOIN AdventureWorks2022.Sales.SalesOrderDetail AS d   
    ON h.SalesOrderID = d.SalesOrderID  
WHERE h.SalesOrderID = 45640;  

Dies ist die Planhinweisliste für die parametrisierte Form der Abfrage:

EXEC sp_create_plan_guide   
    @name = N'TemplateGuide1',  
    @stmt = N'SELECT * FROM AdventureWorks2022.Sales.SalesOrderHeader AS h  
              INNER JOIN AdventureWorks2022.Sales.SalesOrderDetail AS d   
                  ON h.SalesOrderID = d.SalesOrderID  
              WHERE h.SalesOrderID = @0',  
    @type = N'TEMPLATE',  
    @module_or_batch = NULL,  
    @params = N'@0 int',  
    @hints = N'OPTION(PARAMETERIZATION FORCED)';  

Im vorhergehenden Beispiel entspricht der Wert des @stmt -Parameters der parametrisierten Form der Abfrage. Die einzig zuverlässige Möglichkeit, diesen Wert für die Verwendung in sp_create_plan_guide abzurufen, ist die gespeicherte Systemprozedur sp_get_query_template . Mithilfe des folgenden Skripts können Sie die parametrisierte Abfrage abrufen und anschließend eine Planhinweisliste für die Abfrage erstellen.

DECLARE @stmt nvarchar(max);  
DECLARE @params nvarchar(max);  
EXEC sp_get_query_template   
    N'SELECT * FROM AdventureWorks2022.Sales.SalesOrderHeader AS h  
      INNER JOIN AdventureWorks2022.Sales.SalesOrderDetail AS d   
          ON h.SalesOrderID = d.SalesOrderID  
      WHERE h.SalesOrderID = 45639;',  
    @stmt OUTPUT,   
    @params OUTPUT  
EXEC sp_create_plan_guide N'TemplateGuide1',   
    @stmt,   
    N'TEMPLATE',   
    NULL,   
    @params,   
    N'OPTION(PARAMETERIZATION FORCED)';  

Wichtig

Der Wert der konstanten Literale in dem an sp_get_query_template übergebenen @stmt-Parameter kann sich auf den Datentyp auswirken, der für den Parameter, der das Literal ersetzt, gewählt wird. Dies wiederum beeinflusst den Planhinweislistenabgleich. Möglicherweise müssen mehrere Planhinweislisten für verschiedene Parameterwertbereiche erstellt werden.

D: Erstellen einer Planhinweisliste für eine Abfrage, die über eine API-Cursoranforderung übermittelt wird

Planhinweislisten können Übereinstimmungen für Abfragen feststellen, die von API-Servercursorroutinen übermittelt werden. Zu diesen Routinen gehören sp_cursorprepare, sp_cursorprepexec und sp_cursoropen. Anwendungen, die die ADO-, OLE DB- und ODBC-APIs verwenden, interagieren häufig mit SQL Server mithilfe von API-Servercursorn. Sie können den Aufruf von API-Servercursorroutinen in SQL Server Profiler-Ablaufverfolgungen anzeigen, indem Sie das EREIGNIS "RPC:Starting profiler trace" anzeigen.

Angenommen, die folgenden Daten werden in einem RPC:Starting-Ablaufverfolgungsereignis für eine Abfrage angezeigt, die mithilfe einer Planhinweisliste optimiert werden soll:

DECLARE @p1 int;  
SET @p1=-1;  
DECLARE @p2 int;  
SET @p2=0;  
DECLARE @p5 int;  
SET @p5=4104;  
DECLARE @p6 int;  
SET @p6=8193;  
DECLARE @p7 int;  
SET @p7=0;  
EXEC sp_cursorprepexec @p1 output,@p2 output,N'@P1 varchar(255),@P2 varchar(255)',N'SELECT * FROM Sales.SalesOrderHeader AS h INNER JOIN Sales.SalesOrderDetail AS d ON h.SalesOrderID = d.SalesOrderID WHERE h.OrderDate BETWEEN @P1 AND @P2',@p5 OUTPUT,@p6 OUTPUT,@p7 OUTPUT,'20040101','20050101'  
SELECT @p1, @p2, @p5, @p6, @p7;  

Sie stellen fest, dass im Plan für die SELECT-Abfrage im Aufruf von sp_cursorprepexec ein Mergejoin verwendet wird, Sie möchten jedoch ein Hashjoin verwenden. Die mithilfe von sp_cursorprepexec übermittelte Abfrage ist parametrisiert, einschließlich einer Abfragezeichenfolge und einer Parameterzeichenfolge. Sie können die folgende Planhinweisliste erstellen, um die Wahl des Plans zu ändern, indem die Abfrage- und Parameterzeichenfolgen, Zeichen für Zeichen, so wie sie angezeigt werden, im Aufruf von sp_cursorprepexec verwendet werden.

EXEC sp_create_plan_guide   
    @name = N'APICursorGuide',  
    @stmt = N'SELECT * FROM Sales.SalesOrderHeader AS h   
              INNER JOIN Sales.SalesOrderDetail AS d   
                ON h.SalesOrderID = d.SalesOrderID   
              WHERE h.OrderDate BETWEEN @P1 AND @P2',  
    @type = N'SQL',  
    @module_or_batch = NULL,  
    @params = N'@P1 varchar(255),@P2 varchar(255)',  
    @hints = N'OPTION(HASH JOIN)';  

Diese Planhinweisliste wirkt sich auf nachfolgende Ausführungen dieser Abfrage durch die Anwendung aus, und ein Hashjoin wird zur Verarbeitung der Abfrage verwendet.

E. Erstellen einer Planhinweisliste durch Abrufen des XML-Showplans aus einem zwischengespeicherten Plan

Im folgenden Beispiel wird eine Planhinweisliste für eine einfache Ad-hoc-SQL-Anweisung erstellt. Der gewünschte Abfrageplan für diese Anweisung wird in der Planhinweisliste durch die direkte Angabe des XML-Showplans für die Abfrage im @hints -Parameter bereitgestellt. Im Beispiel wird zunächst die SQL-Anweisung ausgeführt, um einen Plan im Plancache zu erzeugen. Dabei wird davon ausgegangen, dass der erzeugte Plan dem gewünschten Plan entspricht und keine weitere Optimierung der Abfrage erforderlich ist. Der XML-Showplan wird durch eine Abfrage der dynamischen Verwaltungssichten sys.dm_exec_query_stats, sys.dm_exec_sql_textund sys.dm_exec_text_query_plan sys.dm_exec_query_stats abgerufen und der Variablen @xml_showplan zugewiesen. Die @xml_showplan -Variable wird dann im sp_create_plan_guide -Parameter an die @hints -Anweisung übergeben. Alternativ können Sie die gespeicherte Prozedur sp_create_plan_guide_from_handle verwenden, um eine Planhinweisliste aus einem Abfrageplan im Plancache zu erstellen.

USE AdventureWorks2022;  
GO  
SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC;  
GO  
DECLARE @xml_showplan nvarchar(max);  
SET @xml_showplan = (SELECT query_plan  
    FROM sys.dm_exec_query_stats AS qs   
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st  
    CROSS APPLY sys.dm_exec_text_query_plan(qs.plan_handle, DEFAULT, DEFAULT) AS qp  
    WHERE st.text LIKE N'SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC;%');  
  
EXEC sp_create_plan_guide   
    @name = N'Guide1_from_XML_showplan',   
    @stmt = N'SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC;',   
    @type = N'SQL',  
    @module_or_batch = NULL,   
    @params = NULL,   
    @hints =@xml_showplan;  
GO  

Weitere Informationen

Planhinweislisten
sp_control_plan_guide (Transact-SQL)
sys.plan_guides (Transact-SQL)
Datenbank-Engine Gespeicherte Prozeduren (Transact-SQL)
Gespeicherte Systemprozeduren (Transact-SQL)
sys.dm_exec_sql_text (Transact-SQL)
sys.dm_exec_cached_plans (Transact-SQL)
sys.dm_exec_query_stats (Transact-SQL)
sp_create_plan_guide_from_handle (Transact-SQL)
sys.fn_validate_plan_guide (Transact-SQL)
sp_get_query_template (Transact-SQL)