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時,無法指定 N'plan_guide_name

DISABLE
停用plan_guide_name指定的計劃指南。 停用計劃指南之後,計劃指南先前比對的查詢未來執行不會受到計劃指南的影響。

停用 ALL
停用目前資料庫中的所有計劃指南。 指定 DISABLE ALL 時,無法指定 N'plan_guide_name

啟用
啟用plan_guide_name指定的計劃指南。 啟用計劃指南之後,即可與符合資格的查詢進行比對。 根據預設,計劃指南會在建立時啟用。

全部啟用
啟用目前資料庫中的所有計劃指南。 指定 ENABLE ALL 時,無法指定 N'plan_guide_name**'**。

備註

試圖卸除或修改計畫指南所參考的函數、預存程序或 DML 觸發程序,不論是已啟用或已停用,都會造成錯誤。

停用已停用的計畫指南,或啟用已啟用的計畫指南,都沒有作用,執行時也不會發生錯誤。

Microsoft SQL Server 的每個版本都無法使用方案指南。 如需 SQL Server 版本支援的功能清單,請參閱 SQL Server 2022 的版本和支援功能。 不過,您可以在任何版本的 SQL Server 中使用DROP或DROP ALL 選項來執行 sp_control_plan_guide

權限

若要在 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. 停用目前資料庫中的所有計劃指南

下列範例會停用資料庫中的所有計劃指南 AdventureWorks2022

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

另請參閱

資料庫引擎 預存程式 (Transact-SQL)
系統預存程序 (Transact-SQL)
sp_create_plan_guide (Transact-SQL)
sys.plan_guides (Transact-SQL)
計畫指南