Bagikan melalui


Bentuk XML dengan kueri XML berlapis

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

Contoh berikut meminta Production.Product tabel untuk mengambil ListPrice nilai dan StandardCost 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 XML bertumpuk:

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 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 query() metode tipe data xml untuk mengkueri XML yang dikembalikan oleh kueri XML 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