sp_control_plan_guide (Transact-SQL)

Gäller för:SQL Server

Systemlagrad sp_control_plan_guide procedur används för att ta bort, aktivera eller inaktivera en planguide.

Transact-SQL syntaxkonventioner

Syntax

sp_control_plan_guide
    [ @operation = ] { N'DROP [ ALL ]' | N'DISABLE [ ALL ]' | N'ENABLE [ ALL ]' }
    [ , [ @name = ] N'name' ]
[ ; ]

Arguments

[ @name = ] N'namn'

Specificerar den planguide som tas bort, aktiveras eller inaktiveras. @name är sysname, med standardvärdet .NULL @name upplöses till den aktuella databasen. Om det inte specificeras, @name som standard .NULL

[ @operation = ] { N'DROP [ ALLA ]' | N'INAKTIVERA [ ALLA ]' | N'AKTIVERA [ ALLA ]' }

Operationen som ska utföras enligt planguiden specificerad i @name. @operation är nvarchar(60), utan standard.

  • DROP

    Släpper planguiden som anges av @name. Efter att en planguide har tagits bort påverkas framtida utföranden av en fråga som tidigare matchades av planguiden inte av planguiden.

  • DROP ALL

    Lägger bort alla planguider i den aktuella databasen. @name kan inte specificeras när DROP ALL det är specificerat.

  • DISABLE

    Inaktiverar planguiden som anges av @name. Efter att en planguide inaktiverats påverkas framtida utföranden av en fråga som tidigare matchades av planguiden inte av planguiden.

  • DISABLE ALL

    Inaktiverar alla planguider i den aktuella databasen. @name kan inte specificeras när DISABLE ALL det är specificerat.

  • ENABLE

    Möjliggör den planguide som anges av @name. En planguide kan matchas med en berättigad fråga efter att den aktiverats. Som standard är planguider aktiverade när de skapas.

  • ENABLE ALL

    Aktiverar alla planguider i den aktuella databasen. @name kan inte specificeras när ENABLE ALL det är specificerat.

Anmärkningar

Att försöka släppa eller ändra en funktion, lagrad procedur eller DML-utlösare som refereras av en planguide, antingen aktiverad eller inaktiverad, orsakar ett fel.

Att inaktivera en inaktiverad planguide eller aktivera en aktiverad planguide har ingen effekt och fungerar utan fel.

Planguider finns inte i varje utgåva av SQL Server. En lista över funktioner som stöds av versionerna av SQL Server finns i Utgåvor och funktioner som stöds i SQL Server 2022. Du kan dock köra sp_control_plan_guide med DROP alternativet eller DROP ALL i vilken version av SQL Server som helst.

Permissions

Att köra sp_control_plan_guide på en planguide av typen OBJECT (skapad, @type = '<object>'specificerar ) kräver ALTER behörighet på objektet som referensen till i planguiden. Alla andra planguider kräver ALTER DATABASE tillstånd.

Examples

A. Aktivera, inaktivera och släpp en planguide

Följande exempel skapar en planguide, inaktiverar den, aktiverar den och tar bort den.

--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. Inaktivera alla planguider i den aktuella databasen

Följande exempel inaktiverar alla planguider i databasen AdventureWorks2025 .

USE AdventureWorks2022;
GO

EXECUTE sp_control_plan_guide N'DISABLE ALL';