sp_control_plan_guide (Transact-SQL)

Löscht, aktiviert oder deaktiviert eine Planhinweisliste.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

sp_control_plan_guide [ @operation = ] N'<control_option>'
  [ , [ @name = ] N'plan_guide_name' ]

<control_option>::=
{ 
    DROP 
  | DROP ALL
  | DISABLE
  | DISABLE ALL
  | ENABLE 
  | ENABLE ALL
}

Argumente

  • N'plan_guide_name'
    Gibt die Planhinweisliste an, die gelöscht, aktiviert oder deaktiviert wird. plan_guide_name wird bezüglich der aktuellen Datenbank aufgelöst. Wenn plan_guide_name nicht angegeben ist, wird der Standardwert NULL verwendet.

  • DROP
    Löscht die durch plan_guide_name angegebene Planhinweisliste. Nachdem eine Planhinweisliste gelöscht wurde, werden zukünftige Ausführungen einer Abfrage, die zuvor mit der Planhinweisliste übereingestimmt hat, nicht von dieser Liste beeinflusst.

  • DROP ALL
    Löscht alle Planhinweislisten in der aktuellen Datenbank. **N'**plan_guide_name kann nicht zusammen mit DROP ALL angegeben werden.

  • DISABLE
    Deaktiviert die durch plan_guide_name angegebene Planhinweisliste. Nachdem eine Planhinweisliste deaktiviert wurde, werden zukünftige Ausführungen einer Abfrage, die zuvor mit der Planhinweisliste übereingestimmt hat, nicht von dieser Liste beeinflusst.

  • DISABLE ALL
    Deaktiviert alle Planhinweislisten in der aktuellen Datenbank. **N'**plan_guide_name kann nicht zusammen mit DISABLE ALL angegeben werden.

  • ENABLE
    Aktiviert die durch plan_guide_name angegebene Planhinweisliste. Eine aktivierte Planhinweisliste kann mit einer geeigneten Abfrage abgeglichen werden. Planhinweislisten werden standardmäßig bei ihrer Erstellung aktiviert.

  • ENABLE ALL
    Aktiviert alle Planhinweislisten in der aktuellen Datenbank. **N'plan_guide_name'**kann nicht zusammen mit ENABLE ALL angegeben werden.

Hinweise

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.

Das Deaktivieren einer deaktivierten bzw. das Aktivieren einer aktivierten Planhinweisliste hat keine Auswirkung und kann ausgeführt werden, ohne einen Fehler zu verursachen.

Sie können sp_control_plan_guide mit der DROP- oder DROP ALL-Option in jeder Edition von SQL Server ausführen; alle anderen Optionen sind jedoch nur in der Standard Edition und in der Enterprise Edition verfügbar.

Berechtigungen

Soll sp_control_plan_guide auf eine Planhinweisliste des Typs OBJECT (erstellt durch Angeben von @type ='OBJECT') ausgeführt werden, ist für das Objekt, auf das die Planhinweisliste verweist, die ALTER-Berechtigung erforderlich. Für alle anderen Planhinweislisten ist die ALTER DATABASE-Berechtigung erforderlich.

Beispiele

A. Aktivieren, Deaktivieren und Löschen einer Planhinweisliste

In dem folgenden Beispiel wird eine Planhinweisliste erstellt, deaktiviert, aktiviert und gelöscht.

--Create a procedure on which to define the plan guide.
IF OBJECT_ID(N'Sales.GetSalesOrderByCountry', N'P') IS NOT NULL
    DROP PROCEDURE Sales.GetSalesOrderByCountry;
GO
CREATE PROCEDURE Sales.GetSalesOrderByCountry 
    (@Country 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;
END
GO
--Create the plan guide.
EXEC sp_create_plan_guide N'Guide3',
    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',
    N'OBJECT',
    N'Sales.GetSalesOrderByCountry',
    NULL,
    N'OPTION (OPTIMIZE FOR (@Country = N''US''))';
GO
--Disable the plan guide.
EXEC sp_control_plan_guide N'DISABLE', N'Guide3';
GO
--Enable the plan guide.
EXEC sp_control_plan_guide N'ENABLE', N'Guide3';
GO
--Drop the plan guide.
EXEC sp_control_plan_guide N'DROP', N'Guide3';

B. Deaktivieren aller Planhinweislisten in der aktuellen Datenbank

In dem folgenden Beispiel werden alle Planhinweislisten in der AdventureWorks-Datenbank deaktiviert.

USE AdventureWorks;
GO
EXEC sp_control_plan_guide N'DISABLE ALL';