sp_control_plan_guide (Transact-SQL)
Elimina, attiva o disattiva una guida di piano.
Sintassi
sp_control_plan_guide [ @operation = ] N'<control_option>'
[ , [ @name = ] N'plan_guide_name' ]
<control_option>::=
{
DROP
| DROP ALL
| DISABLE
| DISABLE ALL
| ENABLE
| ENABLE ALL
}
Argomenti
N'plan_guide_name'
Specifica la guida di piano da eliminare, attivare o disattivare. L'argomento plan_guide_name viene risolto nel database corrente. Se viene omesso, l'impostazione predefinita di plan_guide_name è NULL.DROP
Elimina la guida di piano specificata in plan_guide_name. Dopo l'eliminazione di una guida di piano, le future esecuzioni di una query a cui la guida di piano era in precedenza associata non saranno più influenzate dalla guida di piano.DROP ALL
Elimina tutte le guide di piano nel database corrente. **N'**plan_guide_name non può essere utilizzato quando viene specificata l'opzione DROP ALL.DISABLE
Disattiva la guida di piano specificata in plan_guide_name. Dopo la disattivazione di una guida di piano, le future esecuzioni di una query a cui la guida di piano era in precedenza associata non saranno più influenzate dalla guida di piano.DISABLE ALL
Disattiva tutte le guide di piano nel database corrente. **N'**plan_guide_name non può essere utilizzato quando viene specificata l'opzione DISABLE ALL.ENABLE
Attiva la guida di piano specificata in plan_guide_name. Dopo che è stata attivata, una guida di piano può essere associata a una query idonea. Per impostazione predefinita, le guide di piano vengono attivate in fase di creazione.ENABLE ALL
Attiva tutte le guide di piano nel database corrente. **N'plan_guide_name'**non può essere utilizzato quando viene specificata l'opzione ENABLE ALL.
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 attivata o disattivata, viene generato un errore.
La disattivazione di una guida di piano disattivata o l'attivazione di una guida di piano attivata non ha alcun effetto e viene eseguita senza la restituzione di un errore.
È possibile eseguire sp_control_plan_guide con l'opzione DROP o DROP ALL in qualsiasi versione di SQL Server. Le altre opzioni, tuttavia, sono disponibili solo nelle versioni Standard ed Enterprise Edition.
Autorizzazioni
Per eseguire la stored procedure sp_control_plan_guide su una guida di piano di tipo OBJECT, creata mediante l'istruzione @type ='OBJECT', è necessario disporre dell'autorizzazione ALTER per l'oggetto a cui viene fatto riferimento nella guida di piano. Per tutte le altre guide di piano è necessario disporre dell'autorizzazione ALTER DATABASE.
Esempi
A. Attivazione, disattivazione ed eliminazione di una guida di piano
Nell'esempio seguente viene creata, disattivata, 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.
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. Disattivazione di tutte le guide di piano nel database corrente
Nell'esempio seguente vengono disattivate tutte le guide di piano nel database AdventureWorks.
USE AdventureWorks;
GO
EXEC sp_control_plan_guide N'DISABLE ALL';