OPENXML (Transact-SQL)

OPENXML udostępnia widok zestawu zestaw wierszy w dokumencie XML.Ponieważ OPENXML dostawca zestawu zestaw wierszy, OPENXML mogą być używane w Transact-SQL instrukcje, w których zestaw wierszy dostawca, takie jak tabela, widok lub funkcja OPENROWSET może się pojawić.

Topic link iconKonwencje składni języka Transact-SQL

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

Argumenty

  • idoc
    Czy uchwyt dokumentu reprezentacji wewnętrznej dokumentu XML.Reprezentacji wewnętrznej dokumentu XML jest tworzona przez wywołanie sp_xml_preparedocument.

  • rowpattern
    Jest używany do identyfikowania węzłów wzorcem XPath (w dokumencie XML, którego dojście jest przekazywana idoc Parametr) mają być przetwarzane jako wiersze.

  • 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.

    Bajt

    Description

    0

    Domyślnie: zorientowany atrybut mapowania.

    1

    Użycie zorientowany atrybut mapowania.Można łączyć z XML_ELEMENTS.W takim przypadek zorientowany atrybut mapowanie jest stosowane najpierw, a następnie zorientowany na element mapowania jest stosowana dla wszystkich kolumn, które nie zostały jeszcze zajmuje się.

    2

    Użycie zorientowany na element mapowania.Można łączyć z XML_ATTRIBUTES.W takim przypadek zorientowany atrybut mapowanie jest stosowane najpierw, a następnie zorientowany na element mapowania jest stosowana dla wszystkich kolumn, które nie zostały jeszcze omówione.

    8

    Mogą być połączone (logiczny lub) z XML_ATTRIBUTES lub XML_ELEMENTS.W kontekście pobierania ta flaga wskazuje zużytych dane nie powinny być skopiowane do właściwość przepełnienia @ CR: xmltext.

  • SchemaDeclaration
    To definicja schematu w formularzu: ColNameColType [ColPattern | MetaProperty] [**,**ColNameColType [ColPattern | MetaProperty]...]

    • ColName
      Jest to nazwa kolumna w zestawie zestaw wierszy.

    • ColType
      Czy SQL Server Typ danych kolumna w zestawie zestaw wierszy. Jeżeli typy kolumn różnią się od podstawowej xml Typ danych atrybut typu przymus występuje.

    • ColPattern
      Is opcjonalne, ogólne XPath wzorca w tym artykule opisano, jak węzłów XML powinien być mapowany do kolumn.Jeśli ColPattern nie jest określony, domyślnie mapowania)zorientowany atrybut or zorientowany na element mapowania określonemu flags) ma miejsce.

      Określone jako deseń XPath ColPattern Służy do określania specjalny rodzaj mapowania (z wyjątkiem zorientowany atrybut and zorientowany na element mapowanie) powoduje zastąpienie lub zwiększa domyślnego odwzorowania oznaczone flags.

      Ogólne określony jako wzorzec XPath ColPattern obsługuje także metaproperties.

    • MetaProperty
      Czy jedno z metaproperties, dostarczone przez OPENXML.Jeśli MetaProperty jest określony, kolumna zawiera informacje dostarczone przez metaproperty. The metaproperties umożliwia wyodrębnienie informacji (takich jak względne położenie i informacje o obszarze nazw) o węzłów XML.Zapewnia to więcej informacji niż w tekstowa reprezentacja jest widoczna.

  • TableName
    Jest nazwą tabeli, która może być udzielona (zamiast SchemaDeclaration) Jeśli istnieje już tabela o odpowiedni schemat i desenie kolumna nie są wymagane.

Remarks

Klauzula WITH udostępnia na zestawie zestaw wierszy (i informacje dodatkowe mapowania zgodnie z wymaganiami) przy użyciu formatu SchemaDeclaration lub określanie istniejącego TableName. Jeżeli nie określono opcjonalne z klauzula, wyniki są zwracane w krawędź format tabela.Krawędź tabela stanowią szczegółowymi XML strukturę dokumentu (na przykład nazwy elementu/atrybut, hierarchią dokumentów, obszarami nazw, PIs i SYN) w jednej tabela.

W poniższej tabela opisano strukturę krawędź tabela.

Nazwa kolumna

Typ danych

Description

Identyfikator

bigint

Jest to unikatowy identyfikator węzła dokumentu.

Element główny ma identyfikator wartość 0.Ujemne wartości identyfikatorów, są zastrzeżone.

parentID

bigint

Identyfikuje obiektu nadrzędnego węzła.Nadrzędny identyfikowanego przez ten identyfikator nie jest zawsze element nadrzędny, ale to zależy od NodeType węzła, w których nadrzędna jest identyfikowany przez ten identyfikator.Na przykład jeśli węzeł jest węzłem tekstu, element nadrzędny go może być węzeł atrybut.

Jeśli węzeł jest w najwyższego poziom w dokumencie XML jego ParentID jest NULL.

NodeType

int

Identyfikuje typ węzła.Jest to liczba całkowita, która odpowiada typowi węzeł XML DOM numerowanie.

Typy węzłów:

1 = Węzeł elementu

2 = Węzeł atrybut

3 = Węzeł tekstu

LocalName

nvarchar

Nadaje nazwę lokalną elementu lub atrybut.Jest NULL, jeśli obiekt modelu DOM nie ma nazwy.

Prefiks

nvarchar

Jest prefiksem obszaru nazw nazwy węzła.

namespaceURI

nvarchar

Czy obszaru nazw URI węzła.Jeśli wartość jest NULL, nazw nie jest obecny.

Typ danych

nvarchar

Jest to typ danych rzeczywistych element lub atrybut wiersza jest null.Typ danych to wywnioskować z wbudowanej DTD lub z wbudowanego schematu.

poprzedni

bigint

Jest to identyfikator XML poprzedniego elementu tego samego poziomu.Jest NULL, jeśli nie bezpośredniego poprzedni element równorzędny.

tekst

ntext

Zawiera wartość atrybut lub zawartości elementu w postaci tekstu (lub ma wartość NULL, jeśli krawędź tabela zapisu nie jest wymagane wartości).

Przykłady

A.Przy użyciu OPENXML prostej instrukcja SELECT

Poniższy przykład tworzy reprezentacji wewnętrznej obrazu XML przy użyciu sp_xml_preparedocument. A SELECT Instrukcja, która używa OPENXML zestaw wierszy dostawca następnie jest wykonywane przed reprezentacji wewnętrznej dokumentu XML.

The flag value is zestaw to 1. Oznacza to, że zorientowany atrybut mapowania.Dlatego też atrybutów XML mapować kolumn w zestawie zestaw wierszy.The rowpattern specified as /ROOT/Customer identifies the <Customers> nodes to be processed.

Opcjonalny ColPattern nie określono parametru (wzór kolumn), ponieważ nazwa kolumna jest zgodna nazw atrybut XML.

The OPENXML zestaw wierszy dostawca creates a two-kolumna zestaw wierszy (CustomerID and ContactName) from which the SELECT instrukcja retrieves the necessary columns (in this przypadek, 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

Jeśli takie same SELECT Instrukcja jest wykonywane z flags Ustaw wartość 2, wskazując zorientowany na element Mapowanie wartości CustomerID i ContactName dla obu klientów w dokumencie XML są zwracane jako wartość NULL, ponieważ <Customers> elementy nie mają żadnych podelementy.

Here is the result set.

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

B.Określanie ColPattern mapowania między kolumnami i atrybutów XML

Następująca kwerenda zwraca identyfikator klienta, data zamówienia, atrybuty IDENTYFIKATORA i ilość produktu z dokumentu XML.The rowpattern identifies the <OrderDetails> elements.ProductID and Quantity are the attributes of the <OrderDetails> element.Jednak OrderID, CustomerID, a OrderDate atrybutów (element nadrzędny<Orders>).

Opcjonalny ColPattern została określona.Oznacza to, następujące czynności:

  • The OrderID, CustomerID, and OrderDate in the zestaw wierszy map to the attributes of the parent of the nodes identified by rowpattern in the XML document.

  • The ProdID kolumna in the zestaw wierszy maps to the ProductID atrybut, and the Qty kolumna in the zestaw wierszy maps to the Quantity atrybut of the nodes identified in rowpattern.

Mimo że zorientowany na element określony przez mapowaniaflags parametr, mapowanie określony w ColPattern zastępuje to mapowanie.

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.Uzyskiwanie wyniki w formacie tabela krawędzi

Przykładowy dokument XML w poniższym przykładzie składa się z <Customers>, <Orders>, a <Order_0020_Details> elementy. Pierwszy, sp_xml_preparedocument nazywa się uzyskać dojścia do dokumentu.Uchwyt ten dokument jest przekazywany do OPENXML.

W OPENXML Instrukcja, rowpattern (/ROOT/Customers) identyfikuje <Customers> węzły w celu przetworzenia. Ponieważ klauzula WITH nie zostanie podana, OPENXML Zwraca zestaw wierszy w krawędź format tabela.

Na koniec SELECT Instrukcja pobiera wszystkie kolumny krawędź tabela.

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