중첩된 FOR XML 쿼리가 있는 셰이프 XML
적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
다음 예제에서는 테이블을 쿼리 Production.Product
하여 특정 제품의 값과 StandardCost
값을 검색 ListPrice
합니다. 쿼리를 흥미롭게 만들기 위해 두 가격이 요소에 <Price>
반환되고 각 <Price>
요소에 특성이 있습니다 PriceType
.
예
XML의 예상 모양은 다음과 같습니다.
<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>
중첩된 FOR XML 쿼리입니다.
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;
이전 쿼리의 다음 사항에 유의하세요.
외부 SELECT 문은 ProductID 특성과 두 개의
<Price>
자식 요소가 있는 요소를 생성<Product>
합니다.두 개의 내부 SELECT 문은 각각 PriceType 특성과 제품 가격을 반환하는 XML을 사용하여 두
<Price>
요소를 구성합니다.외부 SELECT 문의 XMLSCHEMA 지시문은 결과 XML의 모양을 설명하는 인라인 XSD 스키마를 생성합니다.
쿼리를 흥미롭게 만들려면 다음 쿼리와 같이 FOR XML 쿼리를 작성한 다음 결과에 대해 XQuery를 작성하여 XML을 재구성할 수 있습니다.
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;
이전 예제에서는 xml 데이터 형식의 메서드를 사용하여 query()
내부 FOR XML 쿼리에서 반환된 XML을 쿼리하고 예상 결과를 생성합니다.
결과는 다음과 같습니다.
<Production.Product ProductID="520">
<Price PriceType="ListPrice">133.3400</Price>
<Price PriceType="StandardCost">98.7700</Price>
</Production.Product>
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기