Bagikan melalui


Bentuk XML dengan kueri bersarang FOR XML

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceDatabase SQL di Microsoft Fabric

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 elemen <Price>, dan setiap elemen <Price> memiliki atribut PriceType.

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 AdventureWorks2022;
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 bagian dalam membentuk dua elemen <Price>, 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 mengkueri XML yang dikembalikan oleh kueri FOR XML bagian dalam dan membangun 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