Share via


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

權限

在 OBJECT 類型的計畫指南 (指定 @type = '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';

請參閱

參考

Database Engine 預存程序 (Transact-SQL)

系統預存程序 (Transact-SQL)

sp_create_plan_guide (Transact-SQL)

sys.plan_guides (Transact-SQL)

概念

計畫指南