Modifica degli indici XML
Per modificare indici XML e non XML esistenti, è possibile utilizzare l'istruzione DDL ALTER INDEX (Transact-SQL)Transact-SQL. Per gli indici XML, tuttavia, non sono disponibili tutte le opzioni ALTER INDEX. Per la modifica degli indici XML non sono valide le opzioni seguenti:
Per gli indici XML non è valida l'opzione di ricostruzione e impostazione IGNORE_DUP_KEY. Per gli indici XML secondari è necessario impostare l'opzione di ricostruzione ONLINE su OFF. Nell'istruzione ALTER INDEX non è consentita l'opzione DROP_EXISTING.
Le modifiche al vincolo di chiave primaria nella tabella utente non vengono automaticamente propagate agli indici XML. L'utente deve prima eliminare gli indici XML e quindi ricrearli.
Se viene specificata l'opzione ALTER INDEX ALL, questa viene applicata agli indici sia XML che non XML. È possibile che vengano specificate opzioni di indicizzazione che non sono valide per entrambi i tipi di indici. In tal caso, l'intera istruzione ha esito negativo.
Esempio: modifica di un indice XML
Nell'esempio seguente viene creato, e quindi modificato, un indice XML impostando l'opzione ALLOW_ROW_LOCKS su OFF. Quando l'opzione ALLOW_ROW_LOCKS è impostata su OFF, le righe non sono bloccate ed è possibile ottenere l'accesso agli indici specificati tramite blocchi a livello di pagina e di tabella.
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)
Esempio: disattivazione e attivazione di un indice XML
Per impostazione predefinita, viene attivato un indice XML. Se si disattiva un indice XML, per le query in esecuzione sulla colonna XML non viene utilizzato l'indice XML. Per abilitare un indice XML, utilizzare ALTER INDEX con l'opzione REBUILD.
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
-- Verify index is disabled.
SELECT *
FROM sys.xml_indexes
WHERE object_id = object_id('T')
AND name='PIdx_T_XmlCol'
-- Rebuild the index.
ALTER INDEX PIdx_T_XmlCol on T REBUILD
Go