Cannot %S_MSG %S_MSG '%.*ls' because it is referenced by plan guide '%.*ls'. Use sp_control_plan_guide to drop the plan guide first. Record the plan guide definition for future use if needed.

Error Message:
Msg 10513, Level 16, State 1, Line 3
Cannot %S_MSG %S_MSG ‘%.*ls’ because it is referenced by plan guide ‘%.*ls’. Use sp_control_plan_guide to drop the plan guide first. Record the plan guide definition for future use if needed.

Severity level:
16.

Description:
This error message appears when you try to drop an object that is referenced by a plan guide.

Consequences:
The T-SQL statement can be parsed, but causes the error at runtime.

Resolution:
Errors of the Severity Level 16 are generated by the user and can be fixed by the SQL Server user. The statement cannot be executed this way. You cannot drop an object referenced by a plan guide. You must dopr the plan guide first.

Versions:
This error message was introduced with SQL Server 2005.

Example(s):
IF OBJECT_ID (‘dbo.t’) IS NOT NULL
    DROP TABLE dbo.t;
GO

CREATE TABLE dbo.t
(
    c1 int
);
GO

IF OBJECT_ID (‘dbo.p’) IS NOT NULL
    DROP PROCEDURE dbo.p;
GO

CREATE PROCEDURE dbo.p
    @p int
AS
SELECT
    c1
FROM
    dbo.t
WHERE
    c1 = @p;
GO

EXEC sp_create_plan_guide
    @name = ‘Guide1’,
    @stmt = ‘SELECT
                c1
            FROM
                dbo.t
            WHERE
                c1 = @p’,
    @type = ‘OBJECT’,
    @module_or_batch = ‘dbo.p’,
    @params = NULL,
    @hints = ‘OPTION (OPTIMIZE FOR (@p = 1))’;

EXEC sp_control_plan_guide ‘DROPP’, ‘Guide1’;

Remarks:
In the above example we try to create a planguide. Because of the typo in the sp_control_plan_guide call, the plan guide is not removed. When you execute this batch a second time, the error is raised.

]]>

Leave a comment

Your email address will not be published.