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

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

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. A cláusula FOR XML pode ser usada em consultas de nível superior e em subconsultas.The FOR XML clause can be used in top-level queries and in subqueries. 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 subqueries, FOR XML can be used in the INSERT, UPDATE, and DELETE statements. FOR XML também pode ser usado em instruções de atribuição.FOR XML 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;

 

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

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

 

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

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

 

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

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

Agora, a consulta não ambígua retorna o seguinte texto:Now the disambiguated query returns the following text:

<x LastName="Achong"/>

Consulte TambémSee Also

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