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