Verwerfen von XML-Indizes

Die DROP INDEX (Transact-SQL)Transact-SQL-Anweisung kann zum Löschen vorhandener primärer oder sekundärer XML- und Nicht-XML-Indizes verwendet werden. Die DROP INDEX-Optionen gelten jedoch nicht für XML-Indizes. Wenn Sie den primären XML-Index löschen, werden sämtliche vorhandenen sekundären Indizes ebenfalls gelöscht.

Die DROP-Syntax mit TableName.IndexName ist veraltet und wird für XML-Indizes nicht unterstützt.

Beispiel: Erstellen und Löschen eines primären XML-Index

Im folgenden Beispiel wird ein XML-Index für eine Spalte vom Typ xml erstellt:

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

Beim Löschen einer Tabelle werden auch XML-Indizes für diese automatisch gelöscht. Eine XML-Spalte kann jedoch nicht aus einer Tabelle gelöscht werden, wenn ein XML-Index für die Spalte vorhanden ist.

Im folgenden Beispiel wird ein XML-Index für eine Spalte vom Typ xml erstellt: Weitere Informationen finden Sie unter Typisiertes XML im Vergleich zu nicht typisiertem XML.

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

Nun können Sie einen primären XML-Index für Co12 erstellen:

CREATE PRIMARY XML INDEX PIdx_TestTable_Col2 
ON TestTable(Col2)
GO

Beispiel: Erstellen eines XML-Index mithilfe der DROP_EXISTING-Indexoption

Im folgenden Beispiel wird ein XML-Index für eine Spalte (XmlColx) erstellt. Anschließend wird ein weiterer XML-Index mit dem gleichen Namen für eine andere Spalte (XmlColy) erstellt. Da die Option DROP_EXISTING angegeben wird, wird der vorhandene XML-Index für (XmlColx) gelöscht und ein neuer XML-Index für (XmlColy) erstellt.

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')

Diese Abfrage gibt den Spaltennamen zurück, für den der angegebene XML-Index erstellt wird.