openxml (Transact-SQL)

openxml xml belgesini bir satır kümesi görünüm sağlar.openxml satır kümesi sağlayıcıolduğundan, openxml kullanılabilir Transact-SQL ifadeleri hangi satır kümesi içinde bir tablo, görünüm veya openrowset işlev gibi sağlayıcıları çıkabilir.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

OPENXML( idoc int [ in] , rowpattern nvarchar [ in ] , [ flags byte [ in ] ] ) 
[ WITH ( SchemaDeclaration | TableName ) ]

Bağımsız değişkenler

  • idoc
    Bir xml belgenin iç gösterimi, belge tanıtıcı değil.Bir xml belgenin iç gösterimi yaratılır sp_xml_preparedocument.

  • rowpattern
    Düğümleri tanımlamak için kullanılan XPath deseni olan (içinde olan tanıtıcı geçirilen xml belgesindeki idoc parametresi) satır var. işlenecek

  • flags
    xml verileri ve ilişkisel satır kümesive sütun sıvı dökülmesine üzerinden nasıl doldurulacağını arasında kullanılmalıdır eşleme gösterir.flagsİsteğe bağlı bir giriş parametresidir ve aşağıdaki değerlerden biri olabilir.

    Bayt değeri

    Açıklama

    0

    Varsayılan olarak öznitelik-merkezli eşleme.

    1

    Use öznitelik-merkezli eşleme.xml_elements ile birleştirilebilir.Bu durum, öznitelik-merkezli eşleme ilk olarak uygulanan ve sonra öğesi merkezli eşleme henüz ile dağıtılır değil tüm sütunlar için uygulanır.

    2

    Use öğesi merkezli eşleme.XML_ATTRIBUTES ile birleştirilebilir.Bu durum öznitelik-merkezli eşleme ilk olarak uygulanan ve sonra öğesi merkezli eşleme tüm sütunları henüz çözüldüğünü için uygulanır.

    8

    Olabilir birleşik (mantıksal or) ile XML_ATTRIBUTES ya da xml_elements.Alma bağlamında, bu bayrak tüketilen veri taşma özellikkopyalanmaması gereken olduğunu gösterir@ mp: xmltext.

  • SchemaDeclaration
    Formu şema tanımı aşağıdaki gibidir: ColNameColType [ColPattern | MetaProperty] [**,**ColNameColType [ColPattern | MetaProperty]...]

    • ColName
      satır kümesiiçinde sütun addır.

    • ColType
      İş SQL Server satır kümesi sütun veri türünü.sütun türlerini temel alınan farklıysa xml veri türü özniteliktürü zorlama gerçekleşir.

    • ColPattern
      Açıklar nasıl xml düğümleri için sütunları eşlenmiş olması gereken bir isteğe bağlı, genel XPath deseni ortaya çıkar.ColPattern Belirtilmezse, varsayılan eşleme (öznitelik-merkezli veya öğesi merkezli tarafından belirtilen eşleme flags) yer alıyor

      Olarak belirtilen XPath desen ColPattern eşleme özel mahiyetini belirlemek için kullanılır ( durum öznitelik-merkezli ve öğesi merkezli eşleme) üzerine yazar veya tarafından gösterilen varsayılan eşleme geliştirir flags.

      Olarak belirtilen genel XPath desen ColPattern de destekler metaproperties.

    • MetaProperty
      Metaproperties openxml tarafından sağlanan biridir.MetaProperty Belirtilen sütun bilgi içermesini sağladığı metaproperty.Metaproperties (göreli konum ve ad alanı bilgileri gibi) bilgileri ayıklamak için xml düğümleri hakkında sağlar.Bu metin olarak gösterilmesi görünür olandan daha fazla bilgi sağlar.

  • TableName
    Verilebilir tablo adı (yerine SchemaDeclaration) istenen şema içeren bir tablo zaten var ve hiçbir sütun desenleri gereklidir.

Açıklamalar

WITH yan tümce kullanarak bir satır kümesi biçiminde (ve ek eşleştirme bilgileri gerektiği gibi) sağlayan SchemaDeclaration veya belirtme varolan bir TableName.İsteğe bağlı WITH yan tümce belirtilmezse, sonuçlar dönen bir Kenar tablo biçimi.Kenar tablo temsil belirtilecek xml belge yapısı (öğesi gibi /öznitelik adları, belge hiyerarşisindeki, ad alanları, PI'ler ve üzerinde son) tek bir tablo.

Aşağıdaki tablo yapısını tanımlayan Kenar tablo.

Sütun adı

Veri türü

Açıklama

Kimliği

bigint

Belge düğümü benzersiz kimliğidir.

Kök öğesi kimliği değeri 0 vardır.Negatif kimliği değerleri ayrılmıştır.

parentID

bigint

Düğümün üst tanımlar.Bu kimliği tarafından tanımlanan üst mutlaka üst öğesi değildir, ancak ana bu kimliği tarafından tanımlanan düğüm NodeType bağlıdırÖrneğin, düğüm bir metin düğümü ise, üst öznitelik düğümü olabilir.

En üst düzey xml belgesindeki düğümse, parentID null olur.

NodeType

int

Düğüm türü tanımlar.xml dom düğüm türüne karşılık gelen tamsayı numaralandırma.

Düğüm türleri şunlardır:

1 = Öğe düğümü

2 = Öznitelik düğümü

3 = Metin düğümü

LocalName

nvarchar

Bir öðe ya da öznitelikyerel adını verir.Olan dom nesnesi bir ad yoksa null.

önek

nvarchar

Düğüm adı ad alanı öneki var.

namespaceURI

nvarchar

Düğümün URI ad alanıdır.Değer null ise, ad alanı bulunuyor.

Datatype

nvarchar

Öğenin gerçek veri türü veya öznitelik satır, aksi halde null.Veri türü, dtd satırla hizalı veya satır içi şema algılanır.

önceki

bigint

Önceki eşdüzey öğesi xml kimliğidir.Olan doğrudan hiçbir önceki Eşdüzey Düğüm yoksa null.

metin

ntext

öznitelik değerini veya metin biçiminde öğe içeriği içerir (veya null ise Kenartablo girdisi bir değer gerektirmez).

Örnekler

A.Basit bir select deyim openxml ile kullanma

Aşağıdaki örnek bir iç xml görüntünün gösterimini kullanarak oluşturur sp_xml_preparedocument.A SELECTkullanandeyim bir OPENXMLsatır kümesisağlayıcı iç gösterimi karşı yürütülen sonra xml belgesi.

flag Değerdir küme için 1.Bu gösterir öznitelik-merkezli eşleme.Bu nedenle, xml özniteliği satır kümesisütunlarda eşleştirin.rowpattern Belirtildiği gibi /ROOT/Customer tanımlayan <Customers> İşlenecek düğümler.

İsteğe bağlı ColPattern (sütun deseni) parametresi belirtmez olduğundan sütun adı ile eşleşen xml öznitelik adı.

OPENXMLsatır kümesisağlayıcı oluşturur ikisütunsatır kümesi ( CustomerID ve ContactName), SELECTdeyim alır gerekli sütunları (Bu durum, tüm sütunlar).

DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
   <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
      <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
      <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
   </Order>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
   <Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
      <OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>
   </Order>
</Customer>
</ROOT>'
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement that uses the OPENXML rowset provider.
SELECT    *
FROM       OPENXML (@idoc, '/ROOT/Customer',1)
            WITH (CustomerID  varchar(10),
                  ContactName varchar(20))

Sonuç kümesi buradadır. 

CustomerID ContactName          
---------- -------------------- 
VINET      Paul Henriot
LILAS      Carlos Gonzlez

Aynı SELECTiledeyim yürütüldüğünde flagsküme 2, gösteren öğesi merkezli eşleme, değerleri CustomerID ve ContactName Müşteriler xml belgesindeki her ikisi de boş olarak olduğundan döndürülen için <Customers> öğelere sahip tüm alt öğeleri.

Sonuç kümesi buradadır.

CustomerID ContactName
---------- -----------
NULL       NULL
NULL       NULL

B.Sütunları ve xml öznitelikleri arasında eşleştirme ColPattern belirtme

Aşağıdaki sorgu xml belgesinden müşteri kimliği, sipariş tarih, ürün kimliği ve miktar öznitelikleri döndürür.rowpattern Tanımlayan <OrderDetails> öğeleri.ProductIDve Quantity öznitelikleri olan <OrderDetails> öğesi.Ancak, OrderID, CustomerID, ve OrderDate üst öðenin öznitelikleri (<Orders>).

İsteğe bağlı ColPattern belirtilir.Aşağıdaki gösterir:

  • OrderID, CustomerID, Ve OrderDate üst düğümler tarafından tanımlanan öznitelikleri için satır kümesi Haritası'nda rowpattern xml belgesi.

  • ProdID satır kümesisütun eşlemeleri için ProductIDöznitelikve Qty satır kümesisütun eşlemeleri için Quantityöznitelik düğümleri içinde tanımlanan rowpattern.

Rağmen öğesi merkezli tarafından belirtilen eşleme flags parametresi, eşleştirme öğesinde belirtilen ColPattern üzerine yazar bu eşleme.

DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
   <Order OrderID="10248" CustomerID="VINET" EmployeeID="5" 
           OrderDate="1996-07-04T00:00:00">
      <OrderDetail ProductID="11" Quantity="12"/>
      <OrderDetail ProductID="42" Quantity="10"/>
   </Order>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
   <Order OrderID="10283" CustomerID="LILAS" EmployeeID="3" 
           OrderDate="1996-08-16T00:00:00">
      <OrderDetail ProductID="72" Quantity="3"/>
   </Order>
</Customer>
</ROOT>'
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- SELECT stmt using OPENXML rowset provider
SELECT *
FROM   OPENXML (@idoc, '/ROOT/Customer/Order/OrderDetail',2)
         WITH (OrderID       int         '../@OrderID',
               CustomerID  varchar(10) '../@CustomerID',
               OrderDate   datetime    '../@OrderDate',
               ProdID      int         '@ProductID',
               Qty         int         '@Quantity')

Sonuç kümesi buradadır.

OrderID CustomerID           OrderDate                 ProdID    Qty
------------------------------------------------------------------------
10248      VINET       1996-07-04 00:00:00.000   11      12
10248      VINET       1996-07-04 00:00:00.000   42      10
10283      LILAS       1996-08-16 00:00:00.000   72      3

C.Kenar tablo biçiminde sonuçlar elde etmek

Aşağıdaki örnek xml belgesini oluşan <Customers>, <Orders>, ve <Order_0020_Details> öğeleri.İlk, sp_xml_preparedocument bir belge tanıtıcı elde etmek için verilir.Bu belge tutamacı için geçirilen OPENXML.

De OPENXMLdeyim, rowpattern ()/ROOT/Customers) tanımlayan <Customers> düğümleri için işlem.WITH yan tümce verilmez çünkü OPENXML satır kümesi içinde döndürür bir Kenar tablo biçimi.

Son olarak SELECT deyim alır tüm sütunlarda Kenar tablo.

DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customers CustomerID="VINET" ContactName="Paul Henriot">
   <Orders CustomerID="VINET" EmployeeID="5" OrderDate=
           "1996-07-04T00:00:00">
      <Order_x0020_Details OrderID="10248" ProductID="11" Quantity="12"/>
      <Order_x0020_Details OrderID="10248" ProductID="42" Quantity="10"/>
   </Orders>
</Customers>
<Customers CustomerID="LILAS" ContactName="Carlos Gonzlez">
   <Orders CustomerID="LILAS" EmployeeID="3" OrderDate=
           "1996-08-16T00:00:00">
      <Order_x0020_Details OrderID="10283" ProductID="72" Quantity="3"/>
   </Orders>
</Customers>
</ROOT>'
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- SELECT statement that uses the OPENXML rowset provider.
SELECT    *
FROM       OPENXML (@idoc, '/ROOT/Customers')
EXEC sp_xml_removedocument @idoc

Ayrıca bkz.

Başvuru