sp_control_plan_guide (Transact-SQL)

適用対象: はいSQL Server (サポートされているすべてのバージョン)

プラン ガイドを削除、有効、または無効にします。

トピック リンク アイコン Transact-SQL 構文表記規則

構文

  
sp_control_plan_guide [ @operation = ] N'<control_option>'  
  [ , [ @name = ] N'plan_guide_name' ]  
  
<control_option>::=  
{   
    DROP   
  | DROP ALL  
  | DISABLE  
  | DISABLE ALL  
  | ENABLE   
  | ENABLE ALL  
}  

引数

N' plan_guide_name '
削除するか、有効または無効にするプラン ガイドを指定します。 plan_guide_name は現在のデータベースに解決されます。 指定しない場合 、plan_guide_name NULL に設定されます。

DROP
で指定されたプラン ガイドを 削除 plan_guide_name。 プラン ガイドが削除された後、以前はプラン ガイドと一致したクエリの今後の実行は、プラン ガイドの影響を受け取ら "されません"。

DROP ALL
現在のデータベースのすべてのプラン ガイドを削除します。 DROP ALL をplan_guide_name 場合は、N' を指定できません。

DISABLE
で指定されたプラン ガイドを 無効plan_guide_name。 プラン ガイドが無効になった後は、そのプラン ガイドに以前一致していたクエリを実行しても、そのプラン ガイドによる影響は受けません。

DISABLE ALL
現在のデータベースのすべてのプラン ガイドを無効にします。 DISABLE ALL plan_guide_name 指定されている場合 、N' は指定できません。

有効化
で指定されたプラン ガイドを 有効plan_guide_name。 プラン ガイドが有効になった後は、そのプラン ガイドを適切なクエリと照合できます。 既定では、プラン ガイドは作成時に有効になります。

ENABLE ALL
現在のデータベースのすべてのプラン ガイドを有効にする。 ENABLE ALL plan_guide_name指定 されている場合、N' は指定できません。

解説

有効、無効にする場合のどちらでも、そのプラン ガイドで参照されている関数、ストアド プロシージャ、または DML トリガーを削除または変更しようとすると、エラーが発生します。

無効なプラン ガイドを無効にする場合や、有効なプラン ガイドを有効にする場合は影響は生じず、エラーなしで実行できます。

プラン ガイドは、 のすべてのエディションで使用できるではありません Microsoft SQL Server 。 SQL Server の各エディションでサポートされる機能の一覧については、「Editions and Supported Features for SQL Server 2016」 (SQL Server 2016 のエディションとサポートされる機能) を参照してください。 ただし、 の任意 のエディションsp_control_plan_guide DROP または DROP ALL オプションを使用して、このオプションを実行できます SQL Server 。

アクセス許可

OBJECT 型 sp_control_plan_guide @type (=' OBJECT ' を指定して作成) のプラン ガイドを実行するには、プラン ガイドで参照されているオブジェクトに対する ALTER 権限が必要です。 その他すべてのプラン ガイドでは、ALTER DATABASE 権限が必要です。

A. プラン ガイドを無効にし、有効にした後、削除する

次の例ではプラン ガイドを作成し、それを無効にし、有効にした後、削除します。

--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. 現在のデータベースのすべてのプラン ガイドを無効にする

次の例では、AdventureWorks2012 データベースのすべてのプラン ガイドを無効にします。

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

参照

データベース エンジンTransact-(ストアド プロシージャSQL)
システム ストアド プロシージャ (Transact-SQL)
sp_create_plan_guide (Transact-SQL)
sys.plan_guides (Transact-SQL)
プラン ガイド