다음을 통해 공유


FOR XML(SQL Server)

SELECT 쿼리는 결과를 행 집합으로 반환합니다. 필요에 따라 쿼리에서 FOR XML 절을 지정하여 SQL 쿼리의 공식 결과를 XML로 검색할 수 있습니다. FOR XML 절은 최상위 쿼리 및 하위 쿼리에서 사용할 수 있습니다. 최상위 FOR XML 절은 SELECT 문에서만 사용할 수 있습니다. 하위 쿼리에서 FOR XML은 INSERT, UPDATE 및 DELETE 문에서 사용할 수 있습니다. 할당 문에도 사용할 수 있습니다.

FOR XML 절에서 다음 모드 중 하나를 지정합니다.

  • 원본

  • 자동

  • 명시적

  • 경로

RAW 모드는 SELECT 문에 의해 반환되는 행 집합의 행당 단일 <> 행 요소를 생성합니다. 중첩된 FOR XML 쿼리를 작성하여 XML 계층 구조를 생성할 수 있습니다.

AUTO 모드는 SELECT 문이 지정된 방식에 따라 추론을 사용하여 결과 XML에 중첩을 생성합니다. 생성된 XML의 모양을 최소한으로 제어할 수 있습니다. 중첩된 FOR XML 쿼리를 작성하여 AUTO 모드 추론에 의해 생성된 XML 셰이프 이외의 XML 계층 구조를 생성할 수 있습니다.

EXPLICIT 모드를 사용하면 XML의 모양을 더 많이 제어할 수 있습니다. XML의 모양을 결정할 때 특성과 요소를 원하는 방향으로 혼합할 수 있습니다. 쿼리 실행으로 인해 생성된 결과 행 집합에 대한 특정 형식이 필요합니다. 그런 다음 이 행 집합 형식이 XML 셰이프에 매핑됩니다. EXPLICIT 모드의 기능은 특성과 요소를 순서대로 혼합하고, 래퍼 및 중첩된 복합 속성을 만들고, 공백으로 구분된 값(예: OrderID 특성에 주문 ID 값 목록이 있을 수 있음) 및 혼합 콘텐츠를 만드는 것입니다.

그러나 EXPLICIT 모드 쿼리를 작성하는 것은 번거로울 수 있습니다. 명시적 모드를 사용하여 계층을 생성하는 대신 중첩된 FOR XML RAW/AUTO/PATH 모드 쿼리 및 TYPE 지시문 작성과 같은 새로운 FOR XML 기능 중 일부를 사용할 수 있습니다. 중첩된 FOR XML 쿼리는 EXPLICIT 모드를 사용하여 생성할 수 있는 모든 XML을 생성할 수 있습니다. 자세한 내용은 중첩 FOR XML 쿼리 사용FOR XML 쿼리에서 TYPE 지시문을 참조하세요.

중첩된 FOR XML 쿼리 기능과 함께 PATH 모드는 EXPLICIT 모드의 유연성을 더 간단하게 제공합니다.

이러한 모드는 설정된 쿼리 실행에만 적용됩니다. 후속 쿼리의 결과에는 영향을 주지 않습니다.

FOR BROWSE 절과 함께 사용되는 선택 항목에는 FOR XML이 유효하지 않습니다.

예시

다음 SELECT 문은 데이터베이스의 Sales.Customer 테이블 AdventureWorks2012Sales.SalesOrderHeader 정보를 검색합니다. 이 쿼리는 FOR XML 절에서 AUTO 모드를 지정합니다.

USE AdventureWorks2012  
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.AdventureWorks2012.Person.Person  
FOR XML AUTO  

로컬 서버인 경우 ServerName 쿼리는 다음을 반환합니다.

<AdventureWorks2012.Person.Person LastName="Achong" />  

네트워크 서버인 경우 ServerName 쿼리는 다음을 반환합니다.

<ServerName.AdventureWorks2012.Person.Person LastName="Achong" />  

이 별칭을 지정하여 이러한 잠재적 모호성을 방지할 수 있습니다.

SELECT TOP 1 LastName  
FROM ServerName.AdventureWorks2012.Person.Person x  
FOR XML AUTO   

이 쿼리는 다음을 반환합니다.

<x LastName="Achong"/>  

또한 참조하십시오

FOR XML 절의 기본 구문
FOR XML에서 RAW 모드 사용
FOR XML에서 AUTO 모드 사용
FOR XML에서 EXPLICIT 모드 사용
FOR XML에서 PATH 모드 사용
OPENXML(SQL Server)
WITH XMLNAMESPACES를 사용하여 쿼리에 네임스페이스 추가