Eliminazione di indici XML

Per eliminare indici XML e non XML primari o secondari esistenti, è possibile utilizzare l'istruzione DROP INDEX (Transact-SQL)Transact-SQL. Tuttavia, nessuna opzione dell'istruzione DROP INDEX si applica agli indici XML. Se si elimina l'indice XML primario, vengono eliminati anche gli indici secondari presenti.

La sintassi DROP con TableName.IndexName è obsoleta e non è supportata per gli indici XML.

Esempio: creazione ed eliminazione di un indice XML primario

Nell'esempio seguente un indice XML viene creato in una colonna di 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

Quando si elimina una tabella, vengono eliminati automaticamente anche tutti i relativi indici XML. Non è tuttavia possibile eliminare una colonna XML da una tabella se in tale colonna è incluso un indice XML.

Nell'esempio seguente viene creato un indice XML in una colonna di tipo xml. Per ulteriori informazioni, vedere Dati XML tipizzati confrontati con dati XML non tipizzati.

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

A questo punto, è possibile creare un indice XML primario in Co12.

CREATE PRIMARY XML INDEX PIdx_TestTable_Col2 
ON TestTable(Col2)
GO

Esempio: creazione di un indice XML tramite l'opzione DROP_EXISTING

Nell'esempio seguente un indice XML viene creato in una colonna (XmlColx). Successivamente, viene creato un altro indice XML con lo stesso nome in una colonna diversa, (XmlColy). Poiché viene specificata l'opzione DROP_EXISTING, viene eliminato l'indice XML esistente in (XmlColx)) e viene creato un nuovo indice XML in (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')

Questa query restituisce il nome della colonna in cui viene creato l'indice XML specificato.