Teilen über


sys.fn_validate_plan_guide (Transact-SQL)

Gilt für: SQL Server Azure SQL Managed Instance

Überprüft die Gültigkeit der angegebenen Planhinweisliste. Die sys.fn_validate_plan_guide Funktion gibt die erste Fehlermeldung zurück, die auftritt, wenn die Plananleitung auf die Abfrage angewendet wird. Ein leeres Rowset wird zurückgegeben, wenn die Planhinweisliste gültig ist. Planhinweislisten können ungültig werden, nachdem Änderungen am physischen Entwurf der Datenbank vorgenommen wurden. 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.

Durch Überprüfen der Gültigkeit einer Planhinweisliste können Sie feststellen, ob die Planhinweisliste ohne Änderungen durch den Optimierer verwendet werden kann. 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.

Transact-SQL-Syntaxkonventionen

Syntax

sys.fn_validate_plan_guide ( plan_guide_id )  

Argumente

plan_guide_id
Die ID der Planhinweisliste, wie sie in der sys.plan_guides -Katalogsicht angegeben ist. plan_guide_id ist vom Datentyp int und besitzt keinen Standardwert.

Zurückgegebene Tabelle

Spaltenname Datentyp Beschreibung
msgnum int ID der Fehlermeldung.
severity tinyint Schweregrad des Fehlers, der zwischen 1 und 25 liegen kann.
state smallint Statusnummer des Fehlers, welche die Stelle im Code angibt, an der der Fehler aufgetreten ist.
message nvarchar(2048) Meldungstext des Fehlers.

Berechtigungen

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. Wenn ein Batch z. B. SELECT-Anweisungen enthält, sind SELECT-Berechtigungen für die Objekte erforderlich, auf die verwiesen wird.

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. Wenn ein Batch z. B. SELECT-Anweisungen enthält, sind SELECT-Berechtigungen für die Objekte erforderlich, auf die verwiesen wird.

Hinweise

Die sys.fn_validate_plan_guide Funktion ist in Azure SQL-Datenbank nicht verfügbar.

Beispiele

A. Überprüfen aller Planhinweislisten in einer Datenbank

Im folgenden Beispiel wird die Gültigkeit aller Planhinweislisten in der aktuellen Datenbank überprüft. Wenn ein leeres Resultset zurückgegeben wird, sind alle Planhinweislisten gültig.

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

B. Testen der Gültigkeitsüberprüfung der Planhinweislisten vor dem Implementieren von Änderungen an der Datenbank

Im folgenden Beispiel wird eine explizite Transaktion verwendet, um einen Index zu löschen. 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. 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.

USE AdventureWorks2022;  
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  

Weitere Informationen

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