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>