Bagikan melalui


Membentuk Struktur XML dengan Kueri FOR XML Bersarang

Contoh berikut mengambil data dari tabel Production.Product untuk mendapatkan nilai ListPrice dan StandardCost dari produk tertentu. Untuk membuat kueri menarik, kedua harga dikembalikan dalam <Price> elemen, dan setiap <Price> elemen memiliki PriceType atribut.

Contoh

Ini adalah bentuk XML yang diharapkan:

<xsd:schema xmlns:schema="urn:schemas-microsoft-com:sql:SqlRowSet2" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="https://schemas.microsoft.com/sqlserver/2004/sqltypes" targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet2" elementFormDefault="qualified">  
  <xsd:import namespace="https://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="https://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />  
  <xsd:element name="Production.Product" type="xsd:anyType" />  
</xsd:schema>  
<Production.Product xmlns="urn:schemas-microsoft-com:sql:SqlRowSet2" ProductID="520">  
  <Price xmlns="" PriceType="ListPrice">133.34</Price>  
  <Price xmlns="" PriceType="StandardCost">98.77</Price>  
</Production.Product>  

Ini adalah kueri FOR XML bersarang:

USE AdventureWorks2012;  
GO  
SELECT Product.ProductID,   
          (SELECT 'ListPrice' as PriceType,   
                   CAST(CAST(ListPrice as NVARCHAR(40)) as XML)   
           FROM    Production.Product Price   
           WHERE   Price.ProductID=Product.ProductID   
           FOR XML AUTO, TYPE),  
          (SELECT  'StandardCost' as PriceType,   
                   CAST(CAST(StandardCost as NVARCHAR(40)) as XML)   
           FROM    Production.Product Price   
           WHERE   Price.ProductID=Product.ProductID   
           FOR XML AUTO, TYPE)  
FROM Production.Product  
WHERE ProductID=520  
for XML AUTO, TYPE, XMLSCHEMA  

Perhatikan hal berikut ini dari kueri sebelumnya:

  • Pernyataan SELECT luar membangun <Product> elemen yang memiliki atribut ProductID dan dua <Price> elemen turunan.

  • Dua pernyataan SELECT dalam membuat dua <Price> elemen, masing-masing dengan atribut PriceType dan XML yang mengembalikan harga produk.

  • Direktif XMLSCHEMA dalam pernyataan SELECT luar menghasilkan skema XSD sebaris yang menjelaskan bentuk XML yang dihasilkan.

Untuk membuat kueri menarik, Anda bisa menulis kueri FOR XML lalu menulis XQuery terhadap hasil untuk membentuk ulang XML, seperti yang diperlihatkan dalam kueri berikut:

SELECT ProductID,   
 ( SELECT p2.ListPrice, p2.StandardCost  
   FROM Production.Product p2   
   WHERE Product.ProductID = p2.ProductID  
   FOR XML AUTO, ELEMENTS XSINIL, type ).query('  
                                   for $p in /p2/*  
                                   return   
                                    <Price PriceType = "{local-name($p)}">  
                                     { data($p) }  
                                    </Price>  
                                  ')  
FROM Production.Product  
WHERE ProductID = 520  
FOR XML AUTO, TYPE  

Contoh sebelumnya menggunakan metode tipe data query() untuk mengajukan kueri xml pada XML yang berasal dari kueri FOR XML yang ada di dalam dan membuat hasil yang diharapkan.

Ini adalah hasilnya:

<Production.Product ProductID="520">  
  <Price PriceType="ListPrice">133.3400</Price>  
  <Price PriceType="StandardCost">98.7700</Price>  
</Production.Product>  

Lihat Juga

Menggunakan Kueri XML Berlapis