Cannot create index enforcing primary key constraint '%.*ls' using DROP_EXISTING option while table has an XML Index.

Error Message:
Msg 1996, Level 16, State 1, Line 1
Cannot create index enforcing primary key constraint ‘%.*ls’ using DROP_EXISTING option while table has an XML Index.

Severity level:
16.

Description:
This error message appears when you try to rebuild an index that is used to enforce a PRIMARY KEY constraint while there is a XML index on this table.

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

Resolution:
Error 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. The XML index must first be dropped before the relational index can be rebuild. After rebuild you need to create the XML index anew.

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

Example(s):
USE tempdb;
GO
IF OBJECT_ID(‘tempdb..#t’) > 0
 DROP TABLE #t
GO
CREATE TABLE #t
(
 id INT
 CONSTRAINT CIX_t_id PRIMARY KEY,
 c1 XML
)
GO
CREATE PRIMARY XML INDEX IX_XML_t_c1
    ON #t(c1);
ALTER INDEX CIX_t_id ON #t
DISABLE;
GO
CREATE UNIQUE CLUSTERED INDEX CIX_t_id
    ON #t(id)
  WITH (
   DROP_EXISTING = ON,
   ONLINE = ON);

Remarks:
In the above example we try to rebuild the index that enforces the PRIMARY KEY constraint via the DROP_EXISTING option, while there is a XML index created on that table. This raises the error.

]]>

Leave a comment

Your email address will not be published.