XML インデックスの変更

ALTER INDEX (Transact-SQL)Transact-SQL DDL ステートメントを使用すると、既存の XML インデックスや XML 以外のインデックスを変更できます。ただし、一部の ALTER INDEX オプションは XML インデックスに使用できません。次のオプションは、XML インデックスの変更時には無効です。

  • 再構築と設定オプションの IGNORE_DUP_KEY は XML インデックスでは無効です。再構築オプション ONLINE は、セカンダリ XML インデックスでは OFF に設定されている必要があります。オプション DROP_EXISTING は、ALTER INDEX ステートメントでは使用できません。

  • ユーザー テーブルの主キー制約に変更があった場合、自動的には XML インデックスに反映されません。ユーザーが、まず XML インデックスを削除し、次に XML インデックスを再作成する必要があります。

  • ALTER INDEX ALL を指定すると、このオプションは XML 以外のインデックスと XML インデックスの両方に適用されます。一方の種類のインデックスでは無効なインデックス オプションが指定される場合があります。その場合、ステートメント全体が失敗します。

例 : XML インデックスの変更

次の例では、XML インデックスを作成後、ALLOW_ROW_LOCKS オプションを OFF に設定してインデックスを変更します。ALLOW_ROW_LOCKS が OFF の場合、行はロックされないので、ページレベルおよびテーブルレベルのロックを使用して、指定したインデックスにアクセスできます。

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)

例 : XML インデックスの無効化と有効化

既定では、XML インデックスは有効です。XML インデックスが無効になっている場合、その XML 列に実行されるクエリでは XML インデックスが使用されません。XML インデックスを有効にするには、REBUILD オプションを指定した ALTER INDEX を使用します。

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