Share via


for xml ve openxml Yayımla ve işlemek için kullanarak xml verilerini

Yapabilirsiniz yürütmek yerine standart satır kümeleri xml sonuçlar döndüren sql sorguları.Bu sorguların doğrudan çalıştırılır veya saklı yordam içinde yürütülen ve kullanıcı tanımlı işlevler olabilir.Doğrudan sonuçlar almak için ilk deyim, for xml yan tümce tümce tümce kullanın.Daha sonra for xml yan tümce tümce tümce içinde xml modu belirtin: raw, auto, açık veya yolu.

Örneğin, aşağıdaki SELECT deyim bilgilerinden alır Sales.Customer ve Sales.SalesOrderHeader Tablolar AdventureWorks2008R2 veritabanı.Bu sorgu belirtir AUTO modunda FOR XML yan tümce tümce tümce:

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

for xml kullanmasa yan tümce xml belgesi veri almak için kullanabileceğiniz Transact-SQL openxml işlev ekleme veri temsil olarak bir xml belge.openxml bir tablo veya görünüm için benzer bir satır kümesi sağlayıcı ve bellekte olan xml belgeleri üzerinde bir satır kümesi sağlar.Bir satır kümesi iç temsili bir xml belgesinin görünümünü sağlayarak ilişkisel bir satır kümesi olan gibi openxml xml veri erişimi sağlar.Satır kümesi kayıtları veritabanı tablolarında depolanır.openxml seçin ve select INTO deyimlerinde kaynak tablo veya Görünüm belirlendiği kullanılır.

Aşağıdaki örnek kullanımını gösterir OPENXML , bir INSERT deyim ve bir SELECT deyim.Örnek xml belgesi içeren <Customers> ve <Orders> öğeleri.

İlk olarak, sp_xml_preparedocument saklı yordam ayrıştırır xml belgesi.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.Bir INSERT deyimini kullanarak OPENXML verileri bir veritabanına böyle satır kümesi kümesi eklemek tablo.Birkaç OPENXML çağrılarının xml belgesinin çeşitli bölümlerini satır kümesi bir görünümünü sağlar ve işlem bunları, örneğin, farklı tablolar içine ekleyerek için kullanılabilirBu işlem da xml tablolarına shredding olarak adlandırılır.

Aşağıdaki örnekte, bir xml belgesinin bir şekilde shredded, <Customers> öğeleri depolanmış olan Customers Tablo ve <Orders> öğeleri depolanmış olan Orders kullanarak tablo iki INSERT deyimleri.Ayrıca örnek gösterir bir SELECT deyim ile OPENXML alır, CustomerID ve OrderDate xml belgesi.Arama işleminde son adım olan sp_xml_removedocument.Bu ayrıştırma aşamasında oluşturulan iç xml aðacý temsilini içerir ayrılan belleği serbest bırakmak için yapılır.

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

Aşağıdaki resimde kullanılarak oluşturulmuş önceki xml belgesinin ayrıştırılmış xml ağacını gösterir sp_xml_preparedocument.

Ayrıştırılmış XML ağacı