sp_control_plan_guide (Transact-SQL)

Elimina, attiva o disattiva una guida di piano.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

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';