Eliminare indici XML

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure

Per eliminare indici XML e non XML primari o secondari esistenti, è possibile usare l'istruzione DROP INDEX (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 di DROP con TableName.IndexName è obsoleta e non è supportata per gli indici XML.

Esempio: creazione ed eliminazione di un indice XML primario

Nell'esempio seguente viene creato un indice XML 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;
GO

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 altre informazioni, vedere Confrontare dati XML tipizzati 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.

Vedi anche