sys.fn_validate_plan_guide (Transact-SQL)

Überprüft die Gültigkeit der angegebenen Planhinweisliste. Die sys.fn_validate_plan_guide-Funktion gibt die erste Fehlermeldung zurück, die beim Anwenden der Planhinweisliste auf ihre Abfrage gefunden 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.

Themenlink (Symbol)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 hat keinen Standardwert.

Zurückgegebene Tabelle

Spaltenname

Datentyp

Beschreibung

msgnum

int

ID der Fehlermeldung.

Schweregrad

tinyint

Schweregrad des Fehlers, der zwischen 1 und 25 liegen kann.

state

smallint

Statusnummer des Fehlers, die die Stelle im Code angibt, an dem 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.

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 AdventureWorks;
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 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 AdventureWorks;
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