Aracılığıyla paylaş


XML dizinleri oluşturma

Bu konuda birincil ve ikincil XML dizinlerin nasıl oluşturulacağını açıklar.

Birincil bir XML dizini oluşturma

To create a primary XML index, use the INDIS (Transact-SQL) CREATETransact-SQL DDL statement.XML dizinlerde olmayan XML dizinleri için kullanılabilir tüm seçenekleri destekler.

XML dizin oluştururken aşağıdakileri unutmayın:

  • Oluşturmak için birincil bir XML dizin, tablonun dizine, temel tablo adı verilen XML sütun, kümelenmiş dizin birincil anahtar olmalıdır.Bu temel tablo bölümlere ayrılmışsa, birincil XML dizini aynı bölümleme şeması ve işlev bölümleme bölümlenmesi, emin olmayı sağlar.

  • Bir XML dizini kümelenmiş, birincil anahtar olarak varsa, tablo değiştirilemez.Tüm XML dizinler bırakın gerekecek tablo önce birincil anahtar değiştirme.

  • Tek bir birincil XML dizin oluşturulabilirxmlTür sütun.Anahtar sütun olarak XML türü sütunu ile başka türde bir dizin oluşturamazsınız.İçerebilir ancak,xmlM tipi sütun olmayan XML dizin.HerxmlTürü sütununda bir tablo olabilir, kendi birincil XML dizini.Ancak, yalnızca bir birincil XML dizin başınaxmltürü sütun izin verilir.

  • XML dizinler aynı ad alanı olmayan XML dizinler olarak bulunmaktadır.Bu nedenle, bir XML dizini ve olmayan XML dizini aynı olamaz tablo aynı ada sahip.

  • IGNORE_DUP_KEY ve çevrimiçi seçenekler, her zaman kapalı XML dizinler için küme.Bu seçenekler, kapalı bir değerle belirtebilirsiniz.

  • Dosya grubu veya kullanıcı tablonun bölümleme bilgilerini XML dizine uygulanır.Kullanıcılar bu ayrı bir XML dizini üzerinde belirtilemez.

  • DROP_EXISTING dizin seçeneği oluşturabilir birincil XML dizini bırakın ve yeni birincil XML dizini veya ikincil bir XML dizini bırakın ve yeni bir ikincil XML dizin oluşturun.Ancak, bu seçenek, bir yeni birincil XML dizin ya da tam tersine oluşturmak için ikinci bir XML dizin bırakamazsınız.

  • Birincil XML dizin adları olan kısıtlamalar Görünüm adları.

Üzerinde XML dizin oluşturulamıyor birxmlgörünümünde sütun yazın birTablo değerli değişkeni xmlsütun yazın ya da xmldeğişken türü.

  • Değiştirmek için birxmltürü sütunu için türlenmemiş yazılı XML ya da tersi, ALTER tablo ALTER COLUMN seçeneğini kullanarak, sütun üzerinde XML dizin bulunması.Biri varsa, sütun türü değişikliği denenmeden önce iptal gerekir.

  • XML dizin oluşturulduğunda seçeneği ARITHABORT ON olarak ayarlanmalıdır.Sorgulamak için ekleme, silme veya güncelleştirme XML veri türünün yöntemlerini kullanarak XML sütun değerleri aynı seçeneği bağlantı üzerinde küme olması gerekir.Değilse, XML veri türü yöntemleri başarısız olur.

    Not

    XML dizin bilgileri katalog görünümleri bulunur.Bununla birlikte,sp_helpindex desteklenmiyor.Bu konuda daha sonra verilen örnekler, XML dizin bilgilerini bulmak için katalog görünümlerini sorgulamak göstermektedir.

When creating or recreating a primary XML index on an XML data type column that contains values of the XML Schema types xs:date or xs:dateTime (or any subtypes of these types) that have a year of less than 1, the index creation will fail in SQL Server 2008.SQL Server 2005 allowed these values, so this problem can occur when creating indexes in a database generated in SQL Server 2005.Daha fazla bilgi için bkz:Klavyeyle yazılan XML Untyped XML'YE karşılaştırılması.

Örnek: Bir birincil XML dizin oluşturma

Türlenmemiş bir XML sütun tablo T (pk tamsayı birincil anahtar, xCol XML) örneklerin çoğunda kullanılır.Bu basit bir şekilde yazılı XML Genişletilebilir.Yazılı XML kullanmak için bkz: ilgili daha fazla bilgi içinXML, SQL Server'da uygulama.) Kolaylık olması açısından, sorgular XML veri örnekleri için aşağıdaki gibi açıklanmıştır:

<book genre="security" publicationdate="2002" ISBN="0-7356-1588-2">
   <title>Writing Secure Code</title>
   <author>
      <first-name>Michael</first-name>
      <last-name>Howard</last-name>
   </author>
   <author>
      <first-name>David</first-name>
      <last-name>LeBlanc</last-name>
   </author>
   <price>39.99</price>
</book>

Aşağıdaki deyim XML, idx_xCol adlı bir XML dizini oluşturur sütun tablonun T: xCol

CREATE PRIMARY XML INDEX idx_xCol on T (xCol)

İkinci bir XML dizini oluşturma

Use the INDIS (Transact-SQL) CREATETransact-SQL DDL statement to create secondary XML indexes and specify the type of the secondary XML index that you want.

, İkincil XML dizinler oluştururken aşağıdakileri unutmayın:

  • IGNORE_DUP_KEY ve çevrimiçi, dışında kümelenmemiş bir dizin için tüm dizin oluşturma seçenekleri ikincil XML dizinler üzerinde izin verilir.İki seçenek her zaman kapalı ikincil XML dizinler için küme olması gerekir.

  • İkincil dizin, yalnızca birincil XML dizini gibi bölümlendirilir.

  • DROP_EXISTING kullanıcının tablo üzerinde ikinci bir dizini bırakma ve kullanıcının tablo üzerinde başka bir ikincil dizin oluşturun.

Sorgulayabilir,sys.xml_indexes Alınacak XML dizin bilgilerini. Katalog görünümü , Notsecondary_type_descsys.xml_indexes Katalog görünümü sütununda ikincil dizin türü sağlar:

SELECT  * 
FROM    sys.xml_indexes

Döndürülen değerlerisecondary_type_desc sütun olabilir NULL, yol, değer veya özellik. Birincil XML dizini, döndürülen değeri NULL olur.

Örnek: İkinci XML dizinler oluşturulurken

Aşağıdaki örnekte nasıl ikincil XML gösterilmektedir dizin oluşturulur.Bu örnek ayrıca, oluşturduğunuz XML dizinler hakkında bilgi gösterir.

CREATE TABLE T (Col1 INT PRIMARY KEY, XmlCol XML)
GO
-- Create primary index.
CREATE PRIMARY XML INDEX PIdx_T_XmlCol 
ON T(XmlCol)
GO
-- Create secondary indexes (PATH, VALUE, PROPERTY).
CREATE XML INDEX PIdx_T_XmlCol_PATH ON T(XmlCol)
USING XML INDEX PIdx_T_XmlCol
FOR PATH
GO
CREATE XML INDEX PIdx_T_XmlCol_VALUE ON T(XmlCol)
USING XML INDEX PIdx_T_XmlCol
FOR VALUE
GO
CREATE XML INDEX PIdx_T_XmlCol_PROPERTY ON T(XmlCol)
USING XML INDEX PIdx_T_XmlCol
FOR PROPERTY
GO

Sorgulayabilir,sys.xml_indexesalmak XML dizin bilgilerini.The secondary_type_desc column provides the secondary index type.

SELECT  * 
FROM    sys.xml_indexes

Dizin bilgileri için katalog görünümü de sorgulayabilirsiniz.

SELECT *
FROM sys.xml_indexes
WHERE object_id = object_id('T')

Örnek verileri ekleyebilir ve sonra XML dizin bilgileri gözden geçirin.

INSERT INTO T VALUES (1,
'<doc id="123">
<sections>
<section num="2">
<heading>Background</heading>
</section>
<section num="3">
<heading>Sort</heading>
</section>
<section num="4">
<heading>Search</heading>
</section>
</sections>
</doc>')
GO
-- Check XML index information.
SELECT *
FROM   sys.dm_db_index_physical_stats (db_id(), object_id('T'), NULL, NULL, 'DETAILED')
GO
-- Space usage of primary XML index
DECLARE @index_id int
SELECT  @index_id = i.index_id
FROM    sys.xml_indexes i 
WHERE   i.name = 'PIdx_T_XmlCol' and object_name(i.object_id) = 'T'
 
SELECT *
FROM sys.dm_db_index_physical_stats (db_id(), object_id('T') , @index_id, DEFAULT, 'DETAILED')
go
--- Space usage of secondary XML index (for example PATH secondary index)  PIdx_T_XmlCol_PATH
DECLARE @index_id int
SELECT  @index_id = i.index_id 
FROM    sys.xml_indexes i 
WHERE  i.name = 'PIdx_T_XmlCol_PATH' and object_name(i.object_id) = 'T'
 
SELECT *
FROM sys.dm_db_index_physical_stats (db_id(), object_id('T') , @index_id, DEFAULT, 'DETAILED')
go
 
-- Space usage of all secondary XML indexes for a particular table
SELECT i.name, object_name(i.object_id), stats.* 
FROM   sys.dm_db_index_physical_stats (db_id(), object_id('T'), NULL, DEFAULT, 'DETAILED') stats
JOIN sys.xml_indexes i ON (stats.object_id = i.object_id and stats.index_id = i.index_id)
WHERE secondary_type is not null
-- Drop secondary indexes.
DROP INDEX PIdx_T_XmlCol_PATH ON T
GO
DROP INDEX PIdx_T_XmlCol_VALUE ON T
GO
DROP INDEX PIdx_T_XmlCol_PROPERTY ON T
GO
-- Drop primary index.
DROP INDEX PIdx_T_XmlCol ON T
-- Drop table T.
DROP TABLE T
Go