sys.fn_validate_plan_guide (Transact-SQL)sys.fn_validate_plan_guide (Transact-SQL)

Gilt für: JaSQL Server NeinAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Überprüft die Gültigkeit der angegebenen Planhinweisliste.Verifies the validity of the specified plan guide. Die sys.fn_validate_plan_guide-Funktion gibt die erste Fehlermeldung zurück, die beim Anwenden der Planhinweisliste auf ihre Abfrage gefunden wird.The sys.fn_validate_plan_guide function returns the first error message that is encountered when the plan guide is applied to its query. Ein leeres Rowset wird zurückgegeben, wenn die Planhinweisliste gültig ist.An empty rowset is returned when the plan guide is valid. Planhinweislisten können ungültig werden, nachdem Änderungen am physischen Entwurf der Datenbank vorgenommen wurden.Plan guides can become invalid after changes are made to the physical design of the database. Wenn beispielsweise eine Planhinweisliste einen bestimmten Index angibt, und dieser Index anschließend gelöscht wird, kann die Abfrage die Planhinweisliste nicht länger verwenden.For example, if a plan guide specifies a particular index and that index is subsequently dropped, the query will no longer be able to use the plan guide.

Durch Überprüfen der Gültigkeit einer Planhinweisliste können Sie feststellen, ob die Planhinweisliste ohne Änderungen durch den Optimierer verwendet werden kann.By validating a plan guide, you can determine whether the guide can be used by the optimizer without modification. Auf der Basis der Ergebnisse der Funktion können Sie entscheiden, dass die Planhinweisliste gelöscht wird und die Abfrage neu optimiert wird, oder Sie können den Datenbankentwurf ändern, indem Sie beispielsweise den in der Planhinweisliste angegebenen Index neu erstellen.Based on the results of the function, you can decide to drop the plan guide and retune the query or modify the database design, for example, by re-creating the index specified in the plan guide.

Themenlinksymbol Transact-SQL Syntax Conventions (Transact-SQL-Syntaxkonventionen)Topic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

sys.fn_validate_plan_guide ( plan_guide_id )  

ArgumenteArguments

plan_guide_idplan_guide_id
Die ID der Planhinweisliste, wie sie in der sys.plan_guides -Katalogsicht angegeben ist.Is the ID of the plan guide as reported in the sys.plan_guides catalog view. plan_guide_id ist vom Datentyp int und besitzt keinen Standardwert.plan_guide_id is int with no default.

Zurückgegebene TabelleTable Returned

SpaltennameColumn name DatentypData type BeschreibungDescription
msgnummsgnum intint ID der Fehlermeldung.ID of the error message.
severityseverity tinyinttinyint Schweregrad des Fehlers, der zwischen 1 und 25 liegen kann.Severity level of the message, between 1 and 25.
statestate smallintsmallint Statusnummer des Fehlers, welche die Stelle im Code angibt, an der der Fehler aufgetreten ist.State number of the error indicating the point in the code in which the error occurred.
messagemessage nvarchar(2048)nvarchar(2048) Meldungstext des Fehlers.Message text of the error.

BerechtigungenPermissions

Für Planhinweislisten mit dem Bereich OBJECT ist die VIEW DEFINITION- oder die ALTER-Berechtigung für das Objekt erforderlich, auf das verwiesen wird, ebenso wie Berechtigungen zur Kompilierung der Abfrage oder des Batches, die in der Planhinweisliste bereitgestellt werden.OBJECT-scoped plan guides require VIEW DEFINITION or ALTER permission on the referenced object and permissions to compile the query or batch that is provided in the plan guide. Wenn ein Batch z. B. SELECT-Anweisungen enthält, sind SELECT-Berechtigungen für die Objekte erforderlich, auf die verwiesen wird.For example, if a batch contains SELECT statements, SELECT permissions on the referenced objects are required.

Für Planhinweislisten mit dem Bereich SQL oder TEMPLATE ist die ALTER-Berechtigung für die Datenbank erforderlich, ebenso wie Berechtigungen zur Kompilierung der Abfrage oder des Batches, die in der Planhinweisliste bereitgestellt werden.SQL- or TEMPLATE-scoped plan guides require ALTER permission on the database and permissions to compile the query or batch that is provided in the plan guide. Wenn ein Batch z. B. SELECT-Anweisungen enthält, sind SELECT-Berechtigungen für die Objekte erforderlich, auf die verwiesen wird.For example, if a batch contains SELECT statements, SELECT permissions on the referenced objects are required.

BeispieleExamples

A.A. Überprüfen aller Planhinweislisten in einer DatenbankValidating all plan guides in a database

Im folgenden Beispiel wird die Gültigkeit aller Planhinweislisten in der aktuellen Datenbank überprüft.The following example checks the validity of all plan guides in the current database. Wenn ein leeres Resultset zurückgegeben wird, sind alle Planhinweislisten gültig.If an empty result set is returned, all plan guides are valid.

USE AdventureWorks2012;  
GO  
SELECT plan_guide_id, msgnum, severity, state, message  
FROM sys.plan_guides  
CROSS APPLY fn_validate_plan_guide(plan_guide_id);  
GO  

B.B. Testen der Gültigkeitsüberprüfung der Planhinweislisten vor dem Implementieren von Änderungen an der DatenbankTesting plan guide validation before implementing a change to the database

Im folgenden Beispiel wird eine explizite Transaktion verwendet, um einen Index zu löschen.The following example uses an explicit transaction to drop an index. Die Funktion sys.fn_validate_plan_guide -Funktion wird ausgeführt, um zu bestimmen, ob durch diese Aktion Planhinweislisten in der Datenbank ungültig gemacht werden.The sys.fn_validate_plan_guide function is executed to determine whether this action will invalidate any plan guides in the database. Auf der Basis der Ergebnisse der Funktion wird entweder ein Commit der DROP INDEX -Anweisung oder ein Rollback der Transaktion ausgeführt, sodass der Index nicht gelöscht wird.Based on the results of the function, the DROP INDEX statement is either committed or the transaction is rolled back, and the index is not dropped.

USE AdventureWorks2012;  
GO  
BEGIN TRANSACTION;  
DROP INDEX IX_SalesOrderHeader_CustomerID ON Sales.SalesOrderHeader;  
-- Check for invalid plan guides.  
IF EXISTS (SELECT plan_guide_id, msgnum, severity, state, message  
           FROM sys.plan_guides  
           CROSS APPLY sys.fn_validate_plan_guide(plan_guide_id))  
    ROLLBACK TRANSACTION;  
ELSE  
    COMMIT TRANSACTION;  
GO  

Siehe auchSee Also

Planhinweislisten Plan Guides
sp_create_plan_guide (Transact-SQL) sp_create_plan_guide (Transact-SQL)
sp_create_plan_guide_from_handle (Transact-SQL)sp_create_plan_guide_from_handle (Transact-SQL)