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