Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
La sp_control_plan_guide stored procedure di sistema viene usata per eliminare, abilitare o disabilitare una guida di piano.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
sp_control_plan_guide
[ @operation = ] { N'DROP [ ALL ]' | N'DISABLE [ ALL ]' | N'ENABLE [ ALL ]' }
[ , [ @name = ] N'name' ]
[ ; ]
Argomenti
[ @name = ] N'name'
Viene specificata la guida di piano da eliminare, abilitare o disabilitare.
@name è sysname, con un valore predefinito .NULL
@name viene risolto nel database corrente. Se non specificato, per impostazione predefinita @name è NULL.
[ @operation = ] { N'DROP [ TUTTI ]' | N'DISABILITA [ TUTTI ]' | N'ABILITA [ TUTTI ]' }
Operazione da eseguire sulla guida di piano specificata in @name. @operation è nvarchar(60), senza impostazione predefinita.
DROPElimina la guida di piano specificata da @name. Dopo l'eliminazione di una guida di piano, le esecuzioni future di una query precedentemente corrispondenti alla guida di piano non sono influenzate dalla guida di piano.
DROP ALLElimina tutte le guide di piano nel database corrente. @name non è possibile specificare quando
DROP ALLviene specificato.DISABLEDisabilita la guida di piano specificata da @name. Dopo aver disabilitato una guida di piano, le esecuzioni future di una query precedentemente corrispondenti alla guida di piano non sono influenzate dalla guida di piano.
DISABLE ALLDisabilita tutte le guide di piano nel database corrente. @name non è possibile specificare quando
DISABLE ALLviene specificato.ENABLEAbilita la guida di piano specificata da @name. Una guida di piano può essere associata a una query idonea dopo l'abilitazione. Per impostazione predefinita, le guide di piano sono abilitate al momento della creazione.
ENABLE ALLAbilita tutte le guide di piano nel database corrente. @name non è possibile specificare quando
ENABLE ALLviene specificato.
Osservazioni:
Se si tenta di eliminare o modificare una funzione, una stored procedure o un trigger DML a cui viene fatto riferimento in una guida di piano abilitata o disabilitata, viene generato un errore.
La disabilitazione di una guida di piano disabilitata o l'abilitazione di una guida di piano abilitata non ha alcun effetto e viene eseguita senza la restituzione di un errore.
Le guide ai piani non sono disponibili in ogni edizione di SQL Server. Per un elenco delle funzionalità supportate dalle varie edizioni di SQL Server, vedere Edizioni e funzionalità supportate di SQL Server 2017. È tuttavia possibile eseguire sp_control_plan_guide con l'opzione DROP o DROP ALL in qualsiasi edizione di SQL Server.
Autorizzazioni
L'esecuzione sp_control_plan_guide in una guida di piano di tipo OBJECT (creata specificando @type = '<object>') richiede ALTER l'autorizzazione per l'oggetto a cui fa riferimento la guida di piano. Tutte le altre guide di piano richiedono ALTER DATABASE l'autorizzazione.
Esempi
R. Abilitare, disabilitare ed eliminare una guida di piano
Nell'esempio seguente viene creata, disabilitata, attivata ed eliminata una guida di piano.
--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. Disabilitare tutte le guide di piano nel database corrente
Nell'esempio seguente vengono disabilitate tutte le guide di piano nel database AdventureWorks2025.
USE AdventureWorks2022;
GO
EXECUTE sp_control_plan_guide N'DISABLE ALL';