Udostępnij za pośrednictwem


Używanie XML dla i OPENXML do publikowania i przetwarzania danych XML

Możesz wykonać kwerendy SQL zwraca wyniki jako XML, zamiast standardowych zestawów wierszy.Te kwerendy może być wykonywany bezpośrednio lub wykonane z w ramach procedur przechowywanych i zdefiniowane przez użytkownika funkcje.Bezpośrednio pobrać wyniki, należy najpierw użyć klauzula XML dla instrukcja SELECT.Następnie określ tryb XML w klauzula XML dla: RAW, AUTO, JAWNE lub ścieżki.

Na przykład, następujący SELECT instrukcja pobiera informacje z Sales.Customer i Sales.SalesOrderHeader tabel w AdventureWorks2008R2 bazy danych.Ta kwerenda określa AUTO w trybie FOR XML klauzula:

USE AdventureWorks2008R2
GO
SELECT Cust.CustomerID, 
       OrderHeader.CustomerID,
       OrderHeader.SalesOrderID, 
       OrderHeader.Status
FROM Sales.Customer Cust 
INNER JOIN Sales.SalesOrderHeader OrderHeader
ON Cust.CustomerID = OrderHeader.CustomerID
FOR XML AUTO

Stosowania klauzula XML dla, aby pobrać dane jako dokument XML, można użyć Transact-SQL OPENXML funkcja wstawiania danych reprezentowane jako dokumentu XML.OPENXML jest podobna do tabela lub widoku dostawca zestaw wierszy i zapewnia zestawu zestaw wierszy nad dokumentami XML, które znajdują się w pamięci.OPENXML umożliwia dostęp do danych XML, tak jakby relacyjnej zestawu zestaw wierszy, zapewniając widok zestawu zestaw wierszy reprezentacji wewnętrznej dokumentu XML.W tabelach bazy danych mogą być przechowywane rekordy w zestawie zestaw wierszy.OPENXML mogą być używane w instrukcji SELECT i SELECT INTO, gdzie można określić źródło tabela lub widoku.

Poniższy przykład ilustruje użycie OPENXML w INSERT instrukcja i SELECT instrukcja.Przykładowy dokument XML zawiera <Customers> i <Orders> elementów.

Pierwszy, sp_xml_preparedocument analizuje procedura składowana dokumentu XML.The parsed document is a tree representation of the nodes (elements, attributes, text, and comments) in the XML document.OPENXML then refers to this parsed XML document and provides a rowset view of all or parts of this XML document.INSERT Za pomocą instrukcja OPENXML można wstawić dane z zestawu zestaw wierszy do tabela bazy danych.Kilka OPENXML wywołania umożliwia widok zestawu zestaw wierszy z różnych części dokumentu XML i przetwarzać je, na przykład, wstawiając je do różnych tabel.Proces ten jest również zwany rozdrabniania XML do tabel.

W poniższym przykładzie dokument XML jest rozdrobniony w sposób, <Customers> elementy są przechowywane w Customers tabela i <Orders> elementy są przechowywane w Orders tabela przy użyciu dwóch INSERT instrukcji.W przykładzie pokazano, również SELECT instrukcja z OPENXML , pobiera CustomerID i OrderDate z dokumentu XML.Ostatni krok w procesie jest wywołanie sp_xml_removedocument.Można to zrobić, aby zwolnić pamięć przydzielona zawiera wewnętrzną reprezentację drzewa XML utworzony w fazie analizy.

-- Create tables for later population using OPENXML.
CREATE TABLE Customers (CustomerID varchar(20) primary key,
                ContactName varchar(20), 
                CompanyName varchar(20))
GO
CREATE TABLE Orders( CustomerID varchar(20), OrderDate datetime)
GO
DECLARE @docHandle int
DECLARE @xmlDocument nvarchar(max) -- or xml type
SET @xmlDocument = N'<ROOT>
<Customers CustomerID="XYZAA" ContactName="Joe" CompanyName="Company1">
<Orders CustomerID="XYZAA" OrderDate="2000-08-25T00:00:00"/>
<Orders CustomerID="XYZAA" OrderDate="2000-10-03T00:00:00"/>
</Customers>
<Customers CustomerID="XYZBB" ContactName="Steve"
CompanyName="Company2">No Orders yet!
</Customers>
</ROOT>'
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument
-- Use OPENXML to provide rowset consisting of customer data.
INSERT Customers 
SELECT * 
FROM OPENXML(@docHandle, N'/ROOT/Customers') 
  WITH Customers
-- Use OPENXML to provide rowset consisting of order data.
INSERT Orders 
SELECT * 
FROM OPENXML(@docHandle, N'//Orders') 
  WITH Orders
-- Using OPENXML in a SELECT statement.
SELECT * FROM OPENXML(@docHandle, N'/ROOT/Customers/Orders') WITH (CustomerID nchar(5) '../@CustomerID', OrderDate datetime)
-- Remove the internal representation of the XML document.
EXEC sp_xml_removedocument @docHandle 

Na poniższej ilustracji przedstawiono drzewa analizowane XML z poprzedniego dokumentu XML, który został utworzony za pomocą sp_xml_preparedocument.

Przeanalizowane drzewo XML