sp_control_plan_guide (Transact-SQL)

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

トピック リンク アイコン 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 を指定する場合、**N'**plan_guide_name は指定できません。

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

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

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

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

説明

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

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

プラン ガイドは、Microsoft SQL Server のすべてのエディションで使用できるわけではありません。 SQL Server の各エディションでサポートされる機能の一覧については、「SQL Server 2012 の各エディションがサポートする機能」を参照してください。 ただし、SQL Server のどのエディションでも、DROP または DROP ALL オプションを指定して sp_control_plan_guide を実行できます。

権限

@type = 'OBJECT' を指定して作成した、OBJECT 型のプラン ガイドで sp_control_plan_guide を実行するには、プラン ガイドで参照されているオブジェクトに対する 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)

概念

プラン ガイド