Modificare indici XML

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

L'istruzione DDL di Transact-SQL ALTER INDEX (Transact-SQL) può essere utilizzata per modificare gli indici XML e non XML esistenti. 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 ricompilazione e impostazione IGNORE_DUP_KEY. Per gli indici XML secondari è necessario impostare l'opzione di ricompilazione 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.

Esempi

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

Disabilitare e abilitare un indice XML

Per impostazione predefinita, viene attivato un indice XML. Se si disabilita 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

Usare l'esempio seguente per verificare che l'indice sia disabilitato.

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

Utilizzare i passaggi seguenti per ricompilare l'indice.

ALTER INDEX PIdx_T_XmlCol on T REBUILD;
GO

Vedi anche