OPENXML (Transact-SQL)

OPENXML, bir XML belgesi üzerinde satır kümesi kümesi görünümü sağlar.OPENXML bir satır kümesi sağlayıcı olduğundan, OPENXML kullanılabilir Transact-SQL ifadeleri hangi satır kümesi sağlayıcı gibi bir tablo, görünüm veya OPENROWSET işlevini görünebilir.

Topic link iconTransact-SQL sözdizimi kuralları

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

Bağımsız değişkenler

  • idoc
    Bir XML belgesinin bir iç gösterim, belge tanıtıcısı mı.Bir XML belgesinin bir iç gösterim çaðýrarak oluşturulur sp_xml_preparedocument.

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

  • flags
    Indicates the mapping that should be used between the XML data and the relational rowset, and how the spill-over column should be filled.flags is an optional input parameter, and can be one of the following values.

    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 uygulanan ilk ve eşlemesi olanöğe merkezli eşleme henüz ile dağıtılır değil, tüm sütunlar için uygulanır.

    2

    Use öğe merkezli eşleme.XML_ATTRIBUTES ile birleştirilebilir.Bu durum, öznitelik merkezli uygulanan ilk ve eşlemesi olanöğe merkezli eşleme ile henüz önceleri tüm sütunlar için uygulanır.

    8

    Olabilir birleştirilmiş (mantıksal VEYA) XML_ATTRIBUTES veya XML_ELEMENTS.Alma bağlamında tüketilen veri taşması özelliğine kopyalanmalıdır değil, bu bayrağın gösterir. @ mp: xmltext.

  • SchemaDeclaration
    Formun şemasını tanýmý gibidir: ColNameColType [ColPattern | MetaProperty] [**,**ColNameColType [ColPattern | MetaProperty]...]

    • ColName
      satır kümesi kümesi, sütun adı olur.

    • ColType
      Iş SQL Server veri türü sütun satır kümesi içinde. Esas alınan sütun türleri farklı xml veri türü öznitelik, tür zorlama oluşur.

    • ColPattern
      Nasıl XML düğümleri sütunlara eşlenmiş olması gereken açıklayan bir isteğe bağlı, genel XPath desen belirtilir.If ColPattern , varsayılan (eşleme belirtilmediöznitelik merkezli or öğe merkezli Belirtilen eşlemeflags) bir yer alır.

      Belirtilen XPath deseni ColPattern özel yapısı (örneğinde eşlemeyi belirtmek için kullanılır öznitelik merkezli and öğe merkezli eşleştirme) üzerine yazar veya tarafından belirtilen varsayılan eşleme geliştirir.flags.

      Genel olarak belirtilen XPath deseni ColPattern Ayrıca, metaproperties destekler.

    • MetaProperty
      OPENXML tarafından sağlanan metaproperties birini belirtilir.If MetaProperty , sütunun tarafından metaproperty sağlanan bilgileri içerip belirtildi. The metaproperties XML düğümleri hakkında bilgiler (örneğin, göreli konum ve ad bilgileri) almanıza olanak sağlar.Bu metin olarak gösterilmesi görünür olandan daha fazla bilgi de sağlar.

  • TableName
    (Yerine verilen tablo adı SchemaDeclaration) istediğiniz şemayı içeren bir tablo zaten var ve yok sütun desenleri gereklidir.

Remarks

WITH yan tümce satır kümesi kümesi biçiminde (ve ek eşleme bilgilerini gerektiği gibi) kullanarak sağlar. SchemaDeclaration veya, varolan belirtme TableName. Isteğe bağlı WITH yan tümce belirtilmezse, sonuçlar döndürülür bir Kenar Çizgili tablo biçimi.Kenar tabloları hassas XML belge yapısı (örneğin, öğe/öznitelik adlarının, belge sıradüzeni, ad, PIs ve son üzerinde) tek bir tablo içinde gösterir.

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

Sütun adı

Veri türü

Açıklama

Kimliği

bigint

Belge düğümü kimliktir.

Bir KIMLIK değeri 0 kök öğesi var.Negatif teşhis kodu (ID) değerleri rezerve edilir.

parentID

bigint

Üst düğümün tanımlar.Bu KIMLIĞI tarafından tanımlanan ana mutlaka üst öğesi değil, ancak bu KIMLIğI tarafından tanımlanan, üst düğümün NodeType bağlıdırÖrneğin, bir metin düğümü düğümse, bu ana bir öznitelik düğümü olabilir.

XML belgesinde, düzey üst düğüm ise, ParentID NULL olur.

NodeType

int

Düğüm türü tanımlar.XML DOM düğümü tipine karşılık gelen bir tamsayı numaralandırma iş.

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

1 Öğe düğümü =

2 Öznitelik düğümü =

3 Metin düğümü =

LocalName

nvarchar

Yerel öğe veya öznitelik adını verir.Iş adı DOM nesnesi yoksa NULL.

önek

nvarchar

Düğüm adı, ad alanı önek'dir.

namespaceURI

nvarchar

Ad alanı URı'düğümünün iş.Değer null (BOş) olduğunda, yok bir ad var.

veri türü

nvarchar

Öğenin gerçek veri türü veya öznitelik, aksi durumda NULL satırdır.Veri türü, satır içi DTD veya satır içi şema değişkenden.

önceki

bigint

XML önceki eşdüzey öğe kimliğidir.Iş doğrudan hiçbir önceki eşdüzey ise NULL.

text

ntext

Öznitelik değerini ya da metin formundaki öğe içeriği içerir (veya NULL ise Kenar Çizgili tablo girişi bir değer gerektirir).

Örnekler

C.Basit bir deyim ile OPENXML kullanma

Aşağıdaki örnek, iç gösterilişinin XML görüntünün kullanarak oluşturur sp_xml_preparedocument. C SELECT deyim kullanan bir OPENXML satır kümesi sağlayıcı, XML belgesinin bir iç sunumunu karşı sonra yürütülür.

The flag value is küme to 1. Bu gösterir öznitelik merkezli eşleme.Bu nedenle, XML öznitelikleri satır kümesi içindeki sütunları eşleştirebilirsiniz.The rowpattern specified as /ROOT/Customer identifies the <Customers> nodes to be processed.

Isteğe bağlı ColPattern sütun adı ile eşleşen, XML özniteliği adı için (sütun deseni) parametresi belirtilmemiş.

The OPENXML satır kümesi sağlayıcı creates a two-sütun satır kümesi (CustomerID and ContactName) from which the SELECT deyim retrieves the necessary columns (in this durum, all the columns).

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

Here is the result set.

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

Aynı SELECT deyim ile yürütüldü flags ayarlamak 2, gösteren öğe merkezli eşleme, değerlerini CustomerID ve ContactName müşterilerin, XML belgesindeki her ikisi de null'OLARAK olduğundan döndürülen için <Customers> öğeleri herhangi bir alt öğeleri yoktur.

Here is the result set.

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

b.XML öznitelikleri sütunlar arasındaki eşleme ColPattern belirtme

Aşağıdaki sorguyu XML belgesinden, müşteri KIMLIĞI, sipariş tarihini, ürün KIMLIĞI ve miktar özniteliklerini döndürür.The rowpattern identifies the <OrderDetails> elements.ProductID and Quantity are the attributes of the <OrderDetails> element.Ancak, OrderID, CustomerID, ve OrderDate üst öğe (öznitelikler<Orders>).

Isteğe bağlı ColPattern belirtildi.Bu, aşağıdakileri gösterir:

  • The OrderID, CustomerID, and OrderDate in the satır kümesi map to the attributes of the parent of the nodes identified by rowpattern in the XML document.

  • The ProdID sütun in the satır kümesi maps to the ProductID öznitelik, and the Qty sütun in the satır kümesi maps to the Quantity öznitelik of the nodes identified in rowpattern.

Ancak öğe merkezli tarafından eşleme belirtildiflags eşlemeyi belirtilen parametre ColPattern Bu eşleştirme üzerine yazar.

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

Here is the result set.

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ını alma

Aşağıdaki örnek XML belgesi içerir <Customers>, <Orders>, ve <Order_0020_Details> öğeleri. Ilk olarak, sp_xml_preparedocument belge bir tanıtıcı elde etmek için verilir.Bu belge tanıtıcı geçirilir OPENXML.

Içinde OPENXML deyim, rowpattern (/ROOT/Customers) tanımlayan <Customers> işlenecek düğümlerin'ı tıklatın. Çünkü, WITH yan tümce, sağlanmamış OPENXML satır kümesi kümesi döndüren bir Kenar Çizgili tablo biçimi.

Son olarak SELECT tüm sütunlara bildirimi alır Kenar Çizgili tablosudur.

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

See Also

Other Resources