Udostępnij za pośrednictwem


OPENXML (Transact-SQL)

OPENXML zapewnia widok zestaw wierszy nad dokumentem XML.Ponieważ zestaw wierszy dostawcaOPENXML, OPENXML, mogą być używane w Transact-SQL sprawozdania, w których zestaw wierszy dostawców, takich jak tabela, widok lub funkcja OPENROWSET może się pojawić.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

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

Argumenty

  • idoc
    To dojście dokumentu reprezentacji wewnętrznej dokumentu XML.Wewnętrzna reprezentacja dokument XML jest tworzony przez wywołanie sp_xml_preparedocument.

  • rowpattern
    Jest używany do identyfikowania węzłów wzorcem wyrażenie XPath (w dokumencie XML, w których uchwyt jest przekazywana w idoc parametr) ma być przetwarzany jako wiersze.

  • flags
    Określa mapowanie używany między danymi XML relacyjnej zestaw wierszyi jak wypełniony rozlewania kolumna .flagsjest opcjonalny parametr wejściowy i może mieć jedną z następujących wartości.

    Bajt

    Opis

    0

    Domyślne, aby atrybut-wyśrodkowany na mapowania.

    1

    Użycie atrybut-wyśrodkowany na mapowania.Można łączyć z XML_ELEMENTS.W tym przypadek atrybut-wyśrodkowany na mapowanie jest stosowany najpierw, a następnie zorientowany na element mapowanie jest stosowana dla wszystkich kolumn, które nie są jeszcze przedmiotem.

    2

    Użycie zorientowany na element mapowania.Można łączyć z XML_ATTRIBUTES.W tym przypadek atrybut-wyśrodkowany na mapowanie jest stosowany najpierw, a następnie zorientowany na element mapowanie jest stosowana dla wszystkich kolumn dotychczas rozpatrywane.

    8

    Mogą być połączone (logiczny lub) z XML_ATTRIBUTES lub XML_ELEMENTS.W kontekście pobierania, ta flaga wskazuje, że nie można skopiować dane wykorzystane do przepełnienie właściwość @ mp: xmltext.

  • SchemaDeclaration
    Jest definicja schematu formularza: ColNameColType [ColPattern | MetaProperty] [**,**ColNameColType [ColPattern | MetaProperty]...]

    • ColName
      Jest to nazwa kolumna w zestaw wierszy.

    • ColType
      Jest SQL Server Typ danych kolumna w zestaw wierszy.Jeśli typy kolumna różnią się od podstawowej xml występuje typ danych atrybuttypu przymus.

    • ColPattern
      To opcjonalne, ogólne wzorzec XPath, w tym artykule opisano, jak mapowane węzłów XML kolumn.Jeśli ColPattern nie jest określony, Mapowanie domyślne (atrybut-wyśrodkowany na lub zorientowany na element mapowanie określoną przez flags) zajmuje miejsce.

      Określone jako deseń XPath ColPattern jest używana do określenia specjalnego charakteru mapowanie (w przypadek atrybut-wyśrodkowany na i zorientowany na element mapowanie) zastępuje lub zwiększa domyślnego mapowania wskazanych przez flags.

      Ogólne deseń XPath określony jako ColPattern obsługuje również metaproperties.

    • MetaProperty
      Jest jednym z metaproperties dostarczonych przez OPENXML.Jeśli MetaProperty jest określona kolumna zawiera informacje dostarczone przez metaproperty.Metaproperties zezwalają na wyodrębnić informacji (takich jak położenie i informacje o przestrzeni nazw) dotyczących węzłów XML.Zawiera więcej informacji niż w tekstowa reprezentacja jest widoczna.

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

Uwagi

Z klauzula zawiera format zestaw wierszy (i informacji o mapowaniu dodatkowe wymagane) przy użyciu SchemaDeclaration lub określanie istniejącego TableName.Jeżeli nie określono opcjonalne z klauzula , wyniki są zwracane w krawędźformattabela . Krawędź tabele przedstawiają szczegółowymi strukturę dokumentu XML (takie jak element / nazwyatrybut , hierarchii dokumentu, obszarów nazw, instrukcje przetwarzania i SYN na) w jednej tabela.

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

Nazwa kolumny

Typ danych

Opis

Identyfikator

bigint

Jest to unikatowy identyfikator węzła dokumentu.

Element główny ma wartość identyfikator 0.Ujemne wartości Identyfikatora 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 zależy od NodeType węzła, którego nadrzędny jest identyfikowany przez ten identyfikator.Na przykład jeśli węzeł jest węzłem tekstu, element nadrzędny może być węzeł atrybut .

Jeśli węzeł jest na najwyższym poziom w dokumencie XML jego ParentID ma wartość NULL.

Sygnatura

int

Identyfikuje typ węzła.Jest liczbą całkowitą, odpowiadający typ węzła XML DOM numerowanie.

Dostępne są następujące typy węzłów:

1 = Węzeł elementu

2 = Węzeł atrybutu

3 = Węzeł tekstowy

LocalName

nvarchar

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

Prefiks

nvarchar

Jest prefiks obszaru nazw nazwa węzła.

namespaceURI

nvarchar

Jest identyfikatorem URI węzła obszaru nazw.Jeśli wartością jest NULL, nazw nie jest obecny.

Typ danych

nvarchar

Jest rzeczywisty typ danych elementu lub wiersz atrybut , inaczej ma wartość NULL.Typ danych jest wywnioskować z wbudowanej DTD lub wbudowany schemat.

poprzedni

bigint

Jest to identyfikator XML poprzedniego elementu równorzędnego.Jest NULL, jeśli nie ma żadnego 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źwpisutabela nie wymaga wartości).

Przykłady

A.OPENXML przy użyciu prostych instrukcja SELECT

Poniższy przykład tworzy Wewnętrzna reprezentacja obrazu XML za pomocą sp_xml_preparedocument.A SELECT instrukcja , która korzysta z OPENXML zestaw wierszy dostawca następnie wykonywana jest wewnętrzna reprezentacja dokumentu XML.

flag Wartość jest zestaw na 1.Oznacza to atrybut-wyśrodkowany na mapowania.Dlatego też atrybutów XML mapować kolumn w zestaw wierszy.rowpattern Określony jako /ROOT/Customer identyfikuje <Customers> węzły mają być przetwarzane.

Opcjonalny ColPattern (wzórkolumna ), parametr nie zostanie określony, ponieważ nazwa kolumna pasuje do nazwy atrybut XML.

OPENXMLzestaw wierszy,dostawca tworzy dwu -kolumnazestaw wierszy ( CustomerID i ContactName) z którego SELECTinstrukcja pobiera potrzebne kolumny (w tym przypadekwszystkie kolumny).

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

Oto zestaw wyników. 

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

Jeśli taki sam SELECT instrukcja jest wykonywana z flags zestaw na 2, wskazując zorientowany na element mapowanie wartości CustomerID i ContactName dla obu klientów w dokumencie XML są zwracane jako NULL, ponieważ <Customers> elementy nie mają żadnych podelementy.

Oto zestaw wyników.

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

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

Następująca kwerenda zwraca identyfikator klienta, data, atrybuty Identyfikatora i ilość produktu z dokumentu XML.rowpattern Identyfikuje <OrderDetails> elementów.ProductIDi Quantity są atrybuty <OrderDetails> elementu.Jednakże OrderID, CustomerID, i OrderDate są atrybuty elementu nadrzędnego (<Orders>).

Opcjonalny ColPattern jest określony.Oznacza to, następujące czynności:

  • OrderID, CustomerID, I OrderDate w mapie zestaw wierszy do atrybutów nadrzędnych węzłów identyfikowane przez rowpattern w dokumencie XML.

  • ProdIDMapujekolumna w zestaw wierszy ProductIDatrybuti Qtykolumna w zestaw wierszy jest mapowany na Quantityatrybut węzłów w rowpattern.

Chociaż zorientowany na element mapowanie jest określone przez flags , mapowanie określony w ColPattern zastępuje mapowania.

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

Oto zestaw wyników.

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>, i <Order_0020_Details> elementów.Pierwszy, sp_xml_preparedocument jest nazywany uzyskiwania dojścia do dokumentu.Uchwyt ten dokument jest przekazywana do OPENXML.

W OPENXMLinstrukcja rowpattern ()/ROOT/Customers) identyfikuje <Customers> węzły do procesu.Ponieważ nie jest dostarczany z klauzula , OPENXML zwraca zestaw wierszy w krawędźformattabela .

Na koniec SELECT instrukcja pobiera wszystkie kolumny w 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

Zobacz także

Odwołanie