중첩 FOR XML 쿼리 사용
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance
FOR XML 쿼리의 xml 데이터 형식 및 TYPE 지시문을 사용하면 FOR XML 쿼리에서 반환된 XML을 서버와 클라이언트에서 처리할 수 있습니다.
xml 형식 변수를 사용하여 처리
FOR XML 쿼리 결과를 xml 형식 변수에 할당하거나 XQuery를 사용하여 결과를 쿼리하고 더 많은 처리를 위해 해당 결과를 xml 형식 변수에 할당할 수 있습니다.
DECLARE @x xml
SET @x=(SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=122 or ProductModelID=119
FOR XML RAW, TYPE)
SELECT @x
-- Result
--<row ProductModelID="122" Name="All-Purpose Bike Stand" />
--<row ProductModelID="119" Name="Bike Wash" />
xml 데이터 형식 메서드 중 하나를 사용하여 변수@x
에 반환된 XML을 추가로 처리할 수 있습니다. 예를 들어 ProductModelID
value() 메서드 를 사용하여특성 값을 검색할 수 있습니다.
DECLARE @i int;
SET @i = (SELECT @x.value('/row[1]/@ProductModelID[1]', 'int'));
SELECT @i;
다음 예제에서는 FOR XML
절에 TYPE
지시문이 지정되므로 FOR XML
쿼리 결과가 xml 형식으로 반환됩니다.
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot');
다음은 결과입니다.
<myRoot>
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
<row ProductModelID="119" Name="Bike Wash" />
</myRoot>
결과가 xml 유형이기 때문에 다음 쿼리와 같이 이 XML에 대해 xml 데이터 형식 메서드 중 하나를 직접 지정할 수 있습니다. 쿼리에서 query() 메서드(xml 데이터 형식)는 <myRoot>
요소의 첫 번째 <row>
요소 자식을 검색하는 데 사용됩니다.
SELECT (SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot')).query('/myRoot[1]/row[1]');
다음은 결과입니다.
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
내부 FOR XML 쿼리 결과를 외부 쿼리에 xml 형식 인스턴스로 반환
내부 쿼리의 결과가 외부 쿼리에 xml 형식으로 반환되는 중첩 FOR XML
쿼리를 작성할 수 있습니다. 예시:
SELECT Col1,
Col2,
( SELECT Col3, Col4
FROM T2
WHERE T2.Col = T1.Col
...
FOR XML AUTO, TYPE )
FROM T1
WHERE ...
FOR XML AUTO, TYPE;
이전 쿼리의 다음 사항에 유의하세요:
내부
FOR XML
쿼리에서 생성된 XML은 외부FOR XML
에 의해 생성된 XML에 추가됩니다.내부 쿼리는
TYPE
지시문을 지정합니다. 따라서 내부 쿼리에서 반환되는 XML 데이터는 xml 형식입니다. TYPE 지시어를 지정하지 않으면 내부FOR XML
쿼리의 결과가 로 반환되고 nvarchar(max) 및 XML 데이터가 올바르게 수정됩니다.
결과 XML 데이터의 셰이프프 제어
중첩 FOR XML 쿼리를 사용하면 결과 XML 데이터의 셰이프를 더 잘 제어할 수 있습니다. 중첩 FOR XML 쿼리를 사용하여 부분적으로 특성 중심 및 부분적으로 요소 중심인 XML을 생성할 수 있습니다.
중첩된 FOR XML 쿼리를 사용하여 특성 중심 XML과 요소 중심 XML을 모두 지정하는 방법에 대한 자세한 내용은 중첩 FOR XML 쿼리와 중첩 FOR XML 쿼리를 사용한 셰이프 XML 비교를 참조하세요.
중첩 AUTO 모드 FOR XML 쿼리를 지정하여 형제를 포함하는 XML 계층을 생성할 수 있습니다. 자세한 정보는 중첩 AUTO 모드 쿼리를 사용하여 형제 생성을 참고하세요.
사용하는 모드에 관계없이 중첩된 FOR XML 쿼리를 사용하면 결과 XML 형식을 보다 자유롭게 설명할 수 있습니다. EXPLICIT 모드 쿼리 대신 사용할 수 있습니다.
예제
다음 항목에서는 중첩 FOR XML 쿼리의 예를 제공합니다.
FOR XML 쿼리 및 중첩 FOR XML 쿼리 비교
단일 수준 FOR XML 쿼리를 중첩 FOR XML 쿼리와 비교합니다. 이 예에서는 특성 중심 및 요소 중심 XML 둘 모두를 쿼리 결과로 지정하는 방법을 보여 줍니다.중첩 AUTO 모드 쿼리를 사용하여 형제 생성
중첩된 AUTO 모드 쿼리를 사용하여 형제를 생성하는 방법을 보여 줍니다ASP.NET에서 중첩 FOR XML 쿼리 사용
ASPX 애플리케이션이 FOR XML을 사용하여 SQL Server에서 XML을 반환할 수 있는 방법을 보여 줍니다.중첩 FOR XML 쿼리를 사용하여 XML 형성
중첩 FOR XML 쿼리를 사용하여 SQL Serve에서 만들어진 XML 문서의 구조를 제어하는 방법을 보여 줍니다.