Quitar índices XML

La instrucción DROP INDEX (Transact-SQL) de Transact-SQL se puede usar para quitar índices XML y no XML principales y secundarios existentes. No obstante, ninguna opción de DROP INDEX se aplica a los índices XML. Si se quita el índice XML principal, también se eliminarán todos los índices secundarios existentes.

La sintaxis de DROP con TableName.IndexName está desapareciendo y no es compatible con los índices XML.

Ejemplo: crear y quitar un índice XML principal

En el ejemplo siguiente se muestra cómo crear un índice XML en una columna de tipo xml.

DROP TABLE T
GO
CREATE TABLE T (Col1 INT PRIMARY KEY, XmlCol XML)
GO
-- Create Primary XML index 
CREATE PRIMARY XML INDEX PIdx_T_XmlCol 
ON T(XmlCol)
GO
-- Verify the index creation. 
-- Note index type is 3 for xml indexes.
-- Note the type 3 is index on XML type.
SELECT *
FROM sys.xml_indexes
WHERE object_id = object_id('T')
AND name='PIdx_T_XmlCol' 
-- Drop the index.
DROP INDEX PIdx_T_XmlCol ON T

Al quitar una tabla, se quitan automáticamente todos los índices XML que contiene. No obstante, una columna XML no puede quitarse desde una tabla si existe un índice XML en la columna.

En el ejemplo siguiente se muestra cómo crear un índice XML en una columna de tipo xml. Para obtener más información, vea Comparación de XML con tipo y XML sin tipo.

CREATE TABLE TestTable(
 Col1 int primary key, 
 Col2 xml (Production.ProductDescriptionSchemaCollection)) 
GO

En este momento, puede crear un índice XML principal en Co12.

CREATE PRIMARY XML INDEX PIdx_TestTable_Col2 
ON TestTable(Col2)
GO

Ejemplo: crear un índice XML utilizando la opción de índice DROP_EXISTING

El ejemplo siguiente muestra cómo crear un índice XML en una columna (XmlColx). A continuación, se creará otro índice XML con el mismo nombre en una columna diferente (XmlColy). Dado que se ha especificado la opción DROP_EXISTING, el índice XML existente en (XmlColx) se quita y se crea un índice XML en (XmlColy).

DROP TABLE T
GO
CREATE TABLE T(Col1 int primary key, XmlColx xml, XmlColy xml)
GO
-- Create XML index on XmlColx.
CREATE PRIMARY XML INDEX PIdx_T_XmlCol 
ON T(XmlColx)
GO
-- Create same name XML index on XmlColy.
CREATE PRIMARY XML INDEX PIdx_T_XmlCol 
ON T(XmlColy) 
WITH (DROP_EXISTING = ON)
-- Verify the index is created on XmlColy.d.
SELECT sc.name 
FROM   sys.xml_indexes si inner join sys.index_columns sic 
ON     sic.object_id=si.object_id and sic.index_id=si.index_id
INNER  join sys.columns sc on sc.object_id=sic.object_id 
AND    sc.column_id=sic.column_id
WHERE  si.name='PIdx_T_XmlCol' 
AND    si.object_id=object_id('T')

Esta consulta devuelve el nombre de la columna en la que el índice XML especificado se ha creado.