Ändern von XML-Indizes

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Die ALTER INDEX (Transact-SQL)Transact-SQL DDL-Anweisung kann verwendet werden, um vorhandene XML- und Nicht-XML-Indizes zu ändern. Nicht alle ALTER INDEX-Optionen sind jedoch für XML-Indizes verfügbar. Die folgenden Optionen sind beim Ändern von XML-Indizes ungültig:

  • Die Option "Neu erstellen und festlegen" IGNORE_DUP_KEY ist für XML-Indizes nicht gültig. Die REBUILD-Option ONLINE muss für sekundäre XML-Indizes auf OFF festgelegt werden. Die Option DROP_EXISTING ist in der ALTER INDEX-Anweisung nicht zulässig.

  • Die Änderungen der Primärschlüsseleinschränkung in der Benutzertabelle werden nicht automatisch an XML-Indizes weitergegeben. Der Benutzer muss die XML-Indizes zuerst löschen und dann neu erstellen.

  • Wenn ALTER INDEX ALL angegeben wird, gilt dies für Nicht-XML- und XML-Indizes. Indizierungsoptionen können angegeben werden, die für beide Arten von Indizes nicht gültig sind. In diesem Fall schlägt die gesamte Anweisung fehl.

Beispiele

Ändern eines XML-Indexes

Im folgenden Beispiel wird ein XML-Index erstellt und dann durch Festlegen der Option ALLOW_ROW_LOCKS auf OFFgeändert. Wenn ALLOW_ROW_LOCKS dies der Wert ist OFF, werden Zeilen nicht gesperrt, und der Zugriff auf die angegebenen Indizes wird mithilfe von Sperren auf Seiten- und Tabellenebene abgerufen.

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

-- Modify and set an index option.
ALTER INDEX PIdx_T_XmlCol on T
SET (ALLOW_ROW_LOCKS = OFF);

Deaktivieren und Aktivieren eines XML-Indexes

Standardmäßig ist ein XML-Index aktiviert. Wenn ein XML-Index deaktiviert ist, verwenden die für die XML-Spalte ausgeführten Abfragen nicht den XML-Index. Verwenden Sie ALTER INDEX mit der Option REBUILD , um einen XML-Index zu aktivieren.

CREATE TABLE T (Col1 INT PRIMARY KEY, XmlCol XML);
GO
CREATE PRIMARY XML INDEX PIdx_T_XmlCol ON T(XmlCol);
GO
ALTER INDEX PIdx_T_XmlCol on T DISABLE;
GO

Verwenden Sie das folgende Beispiel, um zu überprüfen, ob der Index deaktiviert ist.

SELECT *
FROM sys.xml_indexes
WHERE object_id = object_id('T')
AND name='PIdx_T_XmlCol';
GO

Verwenden Sie das folgende Beispiel, um den Index neu zu erstellen.

ALTER INDEX PIdx_T_XmlCol on T REBUILD;
GO

Siehe auch