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

ESTE TÓPICO APLICA-SE A:simSQL Server (a partir de 2008)nãoBanco de Dados SQL do Microsoft AzurenãoAzure SQL Data Warehouse nãoParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Para ver o conteúdo relacionado a versões anteriores do SQL Server, consulte FOR XML (SQL Server).For content related to previous versions of SQL Server, see FOR XML (SQL Server).

Uma consulta SELECT retorna resultados como um conjunto de linhas.A SELECT query returns results as a rowset. Opcionalmente, é possível recuperar resultados formais de uma consulta SQL como XML com a especificação da cláusula FOR XML na consulta.You can optionally retrieve formal results of a SQL query as XML by specifying the FOR XML clause in the query. É possível usar a cláusula FOR XML em consultas de nível superior e em subconsultas.The FOR XML clause can be used in top-level queries and in sub queries. A cláusula FOR XML de nível superior pode ser usada apenas na instrução SELECT.The top-level FOR XML clause can be used only in the SELECT statement. Em subconsultas, FOR XML pode ser usado nas instruções INSERT, UPDATE e DELETE.In sub queries, FOR XML can be used in the INSERT, UPDATE, and DELETE statements. Ele também pode ser usado em instruções de atribuição.It can also be used in assignment statements.

Em uma cláusula FOR XML, você especifica um destes modos:In a FOR XML clause, you specify one of these modes:

  • RAWRAW

  • AUTOAUTO

  • EXPLICITEXPLICIT

  • PATHPATH

    O modo RAW gera um único elemento <row> por linha no conjunto de linhas retornado pela instrução SELECT.The RAW mode generates a single <row> element per row in the rowset that is returned by the SELECT statement. É possível gerar hierarquia de XML escrevendo consultas FOR XML aninhadas.You can generate XML hierarchy by writing nested FOR XML queries.

    O modo AUTO gera aninhamento no XML resultante usando heurística com base na maneira como a instrução SELECT é especificada.The AUTO mode generates nesting in the resulting XML by using heuristics based on the way the SELECT statement is specified. Você tem controle mínimo sobre a forma do XML gerado.You have minimal control over the shape of the XML generated. As consultas FOR XML aninhadas podem ser escritas para gerar hierarquia de XML além da forma do XML gerada pela heurística do modo AUTO.The nested FOR XML queries can be written to generate XML hierarchy beyond the XML shape that is generated by AUTO mode heuristics.

    O modo EXPLICIT permite mais controle sobre a forma do XML.The EXPLICIT mode allows more control over the shape of the XML. É possível misturar atributos e elementos à vontade para decidir a forma do XML.You can mix attributes and elements at will in deciding the shape of the XML. Um formato específico é necessário para o conjunto de linhas resultante que é gerado por causa da execução da consulta.It requires a specific format for the resulting rowset that is generated because of query execution. Em seguida, esse formato do conjunto de linhas é mapeado na forma do XML.This rowset format is then mapped into XML shape. A força do modo EXPLICIT é misturar atributos e elementos à vontade, criar wrappers e propriedades aninhadas complexas, criar valores separados por espaços (por exemplo, o atributo OrderID pode ter uma lista de valores de ID de ordem) e conteúdo misto.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.

    No entanto, a escrita de consultas no modo EXPLICIT pode ser trabalhosa.However, writing EXPLICIT mode queries can be cumbersome. É possível usar algumas das novas funcionalidades de FOR XML, como escrita da diretiva TYPE e de consultas no modo FOR XML RAW/AUTO/PATH, em vez de usar o modo EXPLICIT para gerar as hierarquias.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. As consultas FOR XML aninhadas podem produzir qualquer XML que possa ser gerado usando o modo EXPLICIT.The nested FOR XML queries can produce any XML that you can generate by using the EXPLICIT mode. Para obter mais informações, consulte Usar consultas FOR XML aninhadas e Diretiva TYPE em consultas FOR XML.For more information, see Use Nested FOR XML Queries and TYPE Directive in FOR XML Queries.

    O modo PATH em conjunto com a funcionalidade de consulta FOR XML aninhada fornece a flexibilidade do modo EXPLICIT de uma maneira mais simples.The PATH mode together with the nested FOR XML query capability provides the flexibility of the EXPLICIT mode in a simpler manner.

    Esses modos estão em efeito apenas para a execução da consulta para a qual eles estão definidos.These modes are in effect only for the execution of the query for which they are set. Eles não afetam os resultados de nenhuma consulta subsequente.They do not affect the results of any subsequent queries.

    FOR XML não é válido para nenhuma seleção usada com uma cláusula FOR BROWSE.FOR XML is not valid for any selection that is used with a FOR BROWSE clause.

ExemploExample

A instrução SELECT a seguir recupera informações das tabelas Sales.Customer e Sales.SalesOrderHeader o banco de dados AdventureWorks2012 .The following SELECT statement retrieves information from the Sales.Customer and Sales.SalesOrderHeader tables in the AdventureWorks2012 database. Essa consulta especifica o modo AUTO na cláusula 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  

Cláusula FOR XML e nomes de servidoresThe FOR XML Clause and Server Names

Quando uma instrução SELECT com uma cláusula FOR XML especifica um nome de quatro partes na consulta, o nome do servidor não é retornado no documento XML resultante quando a consulta é executada no computador local.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. No entanto o nome do servidor é retornado como o nome de quatro partes quando a consulta é executada em um servidor de rede.However, the server name is returned as the four-part name when the query is executed on a network server.

Por exemplo, considere esta consulta:For example, consider this query:

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

Quando ServerName for um servidor local, a consulta retornará seguinte:When ServerName is a local server, the query returns the following:

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

Quando ServerName for um servidor de rede, a consulta retornará seguinte:When ServerName is a network server, the query returns the following:

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

Essa ambiguidade potencial pode ser evitada especificando este alias:This potential ambiguity can be avoided by specifying this alias:

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

Essa consulta retorna o seguinte:This query returns the following:

<x LastName="Achong"/>  

Consulte TambémSee Also

Sintaxe básica da cláusula FOR XML Basic Syntax of the FOR XML Clause
Usar modo RAW com FOR XML Use RAW Mode with FOR XML
Usar o modo AUTO com FOR XML Use AUTO Mode with FOR XML
Usar o modo EXPLICIT com FOR XML Use EXPLICIT Mode with FOR XML
Usar o modo PATH com FOR XML Use PATH Mode with FOR XML
OPENXML (SQL Server) OPENXML (SQL Server)
Adicionar namespaces a consultas com WITH XMLNAMESPACESAdd Namespaces to Queries with WITH XMLNAMESPACES