FOR XML(SQL Server)FOR XML (SQL Server)

이전 버전의 SQL Server와 관련된 콘텐츠는 FOR XML(SQL Server)을 참조하세요.For content related to previous versions of SQL Server, see FOR XML (SQL Server).

SELECT 쿼리는 결과를 행 집합으로 반환합니다.A SELECT query returns results as a rowset. 선택적으로 쿼리에서 FOR XML 절을 지정하면 SQL 쿼리의 서식 결과를 XML로 검색할 수 있습니다.You can optionally retrieve formal results of a SQL query as XML by specifying the FOR XML clause in the query. FOR XML 절은 최상위 쿼리 및 하위 쿼리에서 사용할 수 있습니다.The FOR XML clause can be used in top-level queries and in sub queries. 최상위 FOR XML 절은 SELECT 문에서만 사용할 수 있습니다.The top-level FOR XML clause can be used only in the SELECT statement. 하위 쿼리에서는 INSERT, UPDATE 및 DELETE 문에서 FOR XML을 사용할 수 있습니다.In sub queries, FOR XML can be used in the INSERT, UPDATE, and DELETE statements. 또한 대입 문에서도 사용할 수 있습니다.It can also be used in assignment statements.

FOR XML 절에서 다음 모드 중 하나를 지정합니다.In a FOR XML clause, you specify one of these modes:

  • RAWRAW

  • AUTOAUTO

  • EXPLICITEXPLICIT

  • PATHPATH

    RAW 모드는 행 집합의 각 행마다 SELECT 문으로 반환되는 단일 <row> 요소를 생성합니다.The RAW mode generates a single <row> element per row in the rowset that is returned by the SELECT statement. 중첩된 FOR XML 쿼리를 작성하여 XML 계층을 생성할 수 있습니다.You can generate XML hierarchy by writing nested FOR XML queries.

    AUTO 모드는 SELECT 문이 지정된 방식에 따른 추론 방식을 사용하여 결과 XML에서 중첩 구조를 생성합니다.The AUTO mode generates nesting in the resulting XML by using heuristics based on the way the SELECT statement is specified. 생성된 XML의 셰이프는 최소한으로만 제어할 수 있습니다.You have minimal control over the shape of the XML generated. AUTO 모드 추론 방식으로 생성된 XML 셰이프와는 달리 XML 계층을 생성하도록 중첩된 FOR XML 쿼리를 작성할 수 있습니다.The nested FOR XML queries can be written to generate XML hierarchy beyond the XML shape that is generated by AUTO mode heuristics.

    EXPLICIT 모드는 XML 셰이프에 대해 더 많은 제어 기능을 제공합니다.The EXPLICIT mode allows more control over the shape of the XML. 사용자는 XML 셰이프를 결정할 때 자신의 의지대로 특성과 요소를 혼합할 수 있습니다.You can mix attributes and elements at will in deciding the shape of the XML. 이를 위해서는 쿼리 실행에 따라 생성되는 결과 행 집합에 대한 특정 서식이 필요합니다.It requires a specific format for the resulting rowset that is generated because of query execution. 그런 다음 이 행 집합 서식이 XML 셰이프로 매핑됩니다.This rowset format is then mapped into XML shape. EXPLICIT 모드의 장점은 특성 및 요소를 자신의 의지대로 혼합하고, 래퍼 및 중첩된 복합 속성을 만들고, 공백으로 구분된 값(예: 주문 ID 값 목록이 포함된 OrderID 특성)과 혼합된 내용을 만들 수 있습니다.The power of EXPLICIT mode is to mix attributes and elements at will, create wrappers and nested complex properties, create space-separated values (for example, OrderID attribute may have a list of order ID values), and mixed contents.

    하지만 EXPLICIT 모드 쿼리 작성은 복잡할 수 있습니다.However, writing EXPLICIT mode queries can be cumbersome. 중첩된 FOR XML RAW/AUTO/PATH 모드 쿼리 및 TYPE 지시어를 작성하여 EXPLICIT 모드를 사용하는 대신 새로운 FOR XML 기능 중 일부를 사용하여 계층을 생성할 수 있습니다.You can use some of the new FOR XML capabilities, such as writing nested FOR XML RAW/AUTO/PATH mode queries and the TYPE directive, instead of using EXPLICIT mode to generate the hierarchies. 중첩된 FOR XML 쿼리는 EXPLICIT 모드를 사용하여 생성할 수 있는 모든 XML을 만들 수 있습니다.The nested FOR XML queries can produce any XML that you can generate by using the EXPLICIT mode. 자세한 내용은 중첩 FOR XML 쿼리 사용FOR XML 쿼리의 TYPE 지시어를 참조하세요.For more information, see Use Nested FOR XML Queries and TYPE Directive in FOR XML Queries.

    중첩된 FOR XML 쿼리 기능이 함께 포함된 PATH 경로는 EXPLICIT 모드를 보다 간단한 방식으로 사용할 수 있는 유연성을 제공합니다.The PATH mode together with the nested FOR XML query capability provides the flexibility of the EXPLICIT mode in a simpler manner.

    이러한 모드는 실제로 모드가 설정된 해당 쿼리 실행만을 위한 것입니다.These modes are in effect only for the execution of the query for which they are set. 다른 후속 쿼리의 결과에는 영향을 주지 않습니다.They do not affect the results of any subsequent queries.

    FOR XML은 FOR BROWSE 절과 함께 사용하는 모든 선택에 대해서는 유효하지 않습니다.FOR XML is not valid for any selection that is used with a FOR BROWSE clause.

예제Example

다음 SELECT 문은 Sales.Customer 데이터베이스의 Sales.SalesOrderHeaderAdventureWorks2012 테이블에서 정보를 검색합니다.The following SELECT statement retrieves information from the Sales.Customer and Sales.SalesOrderHeader tables in the AdventureWorks2012 database. 다음 쿼리는 AUTO 절에 FOR XML 모드를 지정합니다.This query specifies the AUTO mode in the FOR XML clause:

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 절 및 서버 이름The FOR XML Clause and Server Names

FOR XML 절이 있는 SELECT 명령문이 쿼리에서 네 부분으로 된 이름을 지정할 경우, 로컬 컴퓨터에서 쿼리를 실행하면 서버 이름이 결과 XML 문서에 반환되지 않습니다.When a SELECT statement with a FOR XML clause specifies a four-part name in the query, the server name is not returned in the resulting XML document when the query is executed on the local computer. 그러나 쿼리를 네트워크 서버에서 실행하면 서버 이름은 네 부분으로 된 이름으로 반환됩니다.However, the server name is returned as the four-part name when the query is executed on a network server.

예를 들어 다음과 같은 쿼리를 고려할 수 있습니다.For example, consider this query:

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

ServerName 이 로컬 서버면 쿼리는 다음을 반환합니다.When ServerName is a local server, the query returns the following:

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

ServerName 이 네트워크 서버면 쿼리는 다음을 반환합니다.When ServerName is a network server, the query returns the following:

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

다음과 같이 별칭을 지정하면 이러한 잠재적 모호성을 방지할 수 있습니다.This potential ambiguity can be avoided by specifying this alias:

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

이 쿼리는 다음과 같은 결과를 반환합니다.This query returns the following:

<x LastName="Achong"/>  

참고 항목See Also

FOR XML 절의 기본 구문 Basic Syntax of the FOR XML Clause
FOR XML에서 RAW 모드 사용 Use RAW Mode with FOR XML
FOR XML에서 AUTO 모드 사용 Use AUTO Mode with FOR XML
FOR XML에서 EXPLICIT 모드 사용 Use EXPLICIT Mode with FOR XML
FOR XML에서 PATH 모드 사용 Use PATH Mode with FOR XML
OPENXML(SQL Server) OPENXML (SQL Server)
WITH XMLNAMESPACES를 사용하여 쿼리에 네임스페이스 추가Add Namespaces to Queries with WITH XMLNAMESPACES