適用於:SQL Server
系統 sp_control_plan_guide 預存程式可用來卸除、啟用或停用計劃指南。
語法
sp_control_plan_guide
[ @operation = ] { N'DROP [ ALL ]' | N'DISABLE [ ALL ]' | N'ENABLE [ ALL ]' }
[ , [ @name = ] N'name' ]
[ ; ]
引數
[ @name = ] N'名稱'
指定正在卸除、啟用或停用的計劃指南。
@name為 sysnameNULL。
@name解析為目前的資料庫。 如果未指定, @name 預設為 NULL。
[ @operation = ] { N'DROP [ ALL ]' |N'DISABLE [ ALL ]' |N'ENABLE [ ALL ]' }
在 @name 中指定的計劃指南上執行的作業。 @operation為 nvarchar(60),沒有預設值。
DROP卸除@name所指定的計劃指南。 卸除計劃指南之後,計劃指南先前比對的查詢未來執行不會受到計劃指南的影響。
DROP ALL卸除目前資料庫中的所有計劃指南。
DROP ALL。DISABLE停用@name所指定的計劃指南。 停用計劃指南之後,計劃指南先前比對的查詢未來執行不會受到計劃指南的影響。
DISABLE ALL停用目前資料庫中的所有計劃指南。
DISABLE ALL。ENABLE啟用@name所指定的計劃指南。 方案指南可以在啟用之後,與合格的查詢進行比對。 根據預設,計劃指南會在建立時啟用。
ENABLE ALL啟用目前資料庫中的所有計劃指南。
ENABLE ALL。
備註
試圖卸除或修改計畫指南所參考的函數、預存程序或 DML 觸發程序,不論是已啟用或已停用,都會造成錯誤。
停用已停用的計畫指南,或啟用已啟用的計畫指南,都沒有作用,執行時也不會發生錯誤。
每個版本的 SQL Server 都無法使用方案指南。 如需 SQL Server 版本支援的功能清單,請參閱 SQL Server 2022 的版本和支援功能。 不過,您可以在任何版本的 SQL Server 中使用 或 sp_control_plan_guide 選項來執行DROPDROP ALL。
權限
在類型的sp_control_plan_guide計劃指南上執行 OBJECT (已建立指定 @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.
EXECUTE 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.
EXECUTE sp_control_plan_guide N'DISABLE',
N'Guide3';
GO
--Enable the plan guide.
EXECUTE sp_control_plan_guide N'ENABLE',
N'Guide3';
GO
--Drop the plan guide.
EXECUTE sp_control_plan_guide N'DROP',
N'Guide3';
GO
B. 停用目前資料庫中的所有計劃指南
下列範例會停用資料庫中的所有計劃指南 AdventureWorks2025 。
USE AdventureWorks2022;
GO
EXECUTE sp_control_plan_guide N'DISABLE ALL';