FOR XML(SQL Server)
적용 대상: SQL Server
Azure SQL Database
Azure SQL Managed Instance
SELECT
쿼리는 결과를 행 집합으로 반환합니다. 필요에 따라 쿼리에서 FOR XML
절을 지정하여 SQL 쿼리의 공식 결과를 XML로 검색할 수 있습니다. FOR XML
절은 최상위 쿼리 및 하위 쿼리에서 사용할 수 있습니다. 최상위 FOR XML
절은 SELECT
문에서만 사용할 수 있습니다. 하위 쿼리에서 FOR XML
은 INSERT
, UPDATE
및 DELETE
문에서 사용할 수 있습니다. FOR XML
은 대입문에서도 사용할 수 있습니다.
FOR XML
절에서 다음 모드 중 하나를 지정합니다.
RAW
AUTO
EXPLICIT
PATH
RAW
모드는 SELECT
문에 의해 반환되는 행 집합의 행당 단일 <row>
요소를 생성합니다. 중첩 FOR XML
쿼리를 작성하여 XML 계층 구조를 생성할 수 있습니다.
AUTO
모드는 SELECT
문이 지정된 방식에 따라 경험적 접근을 사용하여 결과 XML에 중첩을 생성합니다. 생성된 XML의 셰이프를 최소한으로 제어할 수 있습니다. 중첩 FOR XML
쿼리를 작성하여 AUTO
모드 경험적 접근에 의해 생성된 XML 셰이프 이외의 XML 계층 구조를 생성할 수 있습니다.
EXPLICIT
모드를 사용하면 XML의 셰이프를 더 많이 제어할 수 있습니다. 사용자는 XML 셰이프를 결정할 때 자신의 의지대로 특성과 요소를 혼합할 수 있습니다. 쿼리 실행으로 인해 생성된 결과 행 집합에 대한 특정 형식이 필요합니다. 그런 다음 이 행 집합 형식이 XML 셰이프에 매핑됩니다. EXPLICIT
모드의 장점은 특성 및 요소를 자신의 의지대로 혼합하고, 래퍼 및 중첩 복합 속성을 만들고, 공백으로 구분된 값(예: 주문 ID 값 목록이 포함된 OrderID
특성)과 혼합된 콘텐츠를 만들 수 있습니다.
그러나 쓰기 EXPLICIT
모드 쿼리는 번거로울 수 있습니다. EXPLICIT
모드를 사용하여 계층 구조를 생성하는 대신 중첩 FOR XML RAW
, AUTO
또는 PATH
모드 쿼리 및 TYPE
지시문 작성과 같은 새로운 FOR XML
기능 중 일부를 사용할 수 있습니다. 중첩 FOR XML
쿼리는 EXPLICIT
모드를 사용하여 생성할 수 있는 모든 XML을 생성할 수 있습니다. 자세한 내용은중첩 FOR XML 쿼리 사용 및 FOR XML 쿼리의 TYPE 지시문을 참조하세요.
PATH
모드는 중첩 FOR XML
쿼리 기능과 함께 더 간단한 방식으로 EXPLICIT
모드의 유연성을 제공합니다.
이러한 모드는 설정된 쿼리 실행에만 적용됩니다. 후속 쿼리의 결과에는 영향을 주지 않습니다.
FOR XML
은 FOR BROWSE
절과 함께 사용되는 선택 영역에 유효하지 않습니다.
예제
다음 SELECT
문은 AdventureWorks2022
데이터베이스의 Sales.Customer
및 Sales.SalesOrderHeader
테이블에서 정보를 검색합니다. 이 쿼리는 FOR XML
절의 AUTO
모드를 지정합니다.
USE AdventureWorks2022;
GO
SELECT Cust.CustomerID,
OrderHeader.CustomerID,
OrderHeader.SalesOrderID,
OrderHeader.STATUS
FROM Sales.Customer Cust
INNER JOIN Sales.SalesOrderHeader OrderHeader
ON Cust.CustomerID = OrderHeader.CustomerID
FOR XML AUTO;
FOR XML 절 및 서버 이름
FOR XML
절이 있는 SELECT
문이 쿼리에서 네 부분으로 구성된 이름을 지정하면 로컬 컴퓨터에서 쿼리가 실행될 때 서버 이름이 결과 XML 문서에 반환되지 않습니다. 그러나 네트워크 서버에서 쿼리를 실행할 때 서버 이름은 네 부분으로 구성된 이름으로 반환됩니다.
다음 쿼리를 예로 들 수 있습니다.
SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person
FOR XML AUTO;
로컬 서버: ServerName
이 로컬 서버인 경우 쿼리는 다음 텍스트를 반환합니다.
<AdventureWorks2022.Person.Person LastName="Achong" />
네트워크 서버: ServerName
이 네트워크 서버인 경우 쿼리는 다음 텍스트를 반환합니다.
<ServerName.AdventureWorks2022.Person.Person LastName="Achong" />
모호성 방지: 다음과 같이 별칭을 지정하여 이러한 잠재적 모호성을 방지할 수 있습니다.
SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person x
FOR XML AUTO;
이제 명확하게 구분된 쿼리는 다음 텍스트를 반환합니다.
<x LastName="Achong"/>