Compartilhar via


FOR XML (SQL Server)

Uma consulta SELECT retorna resultados como um conjunto de linhas. Opcionalmente, você pode recuperar resultados formais de uma consulta SQL como XML especificando a cláusula FOR XML na consulta. A cláusula FOR XML pode ser usada em consultas de nível superior e em subconsultas. A cláusula FOR XML de nível superior só pode ser usada na instrução SELECT. Em subconsultas, FOR XML pode ser usado nas instruções INSERT, UPDATE e DELETE. Ele também pode ser usado em instruções de atribuição.

Em uma cláusula FOR XML, você especifica um destes modos:

  • CRU

  • AUTOMÁTICO

  • EXPLÍCITO

  • Caminho

O modo RAW gera um único <elemento de linha> por linha no conjunto de linhas retornado pela instrução SELECT. Você pode gerar hierarquia XML escrevendo consultas FOR XML aninhadas.

O modo AUTO gera aninhamento no XML resultante usando heurística com base na maneira como a instrução SELECT é especificada. Você tem controle mínimo sobre a forma do XML gerado. Consultas FOR XML aninhadas podem ser escritas para gerar uma hierarquia XML que vai além da estrutura XML criada pelas heurísticas do modo AUTO.

O modo EXPLICIT permite mais controle sobre a forma do XML. Você pode misturar atributos e elementos à vontade na decisão da forma do XML. Ele requer um formato específico para o conjunto de linhas resultante que é gerado devido à execução da consulta. Esse formato de conjunto de linhas é mapeado para a forma XML. O poder do modo EXPLICIT está em misturar atributos e elementos à vontade, criar envoltórios e propriedades complexas aninhadas, criar valores separados por espaço (por exemplo, o atributo OrderID pode conter uma lista de valores de IDs de pedido) e conteúdos mistos.

No entanto, escrever consultas no modo EXPLICIT pode ser complicado. Você pode utilizar alguns dos novos recursos e capacidades FOR XML, como a escrita de consultas aninhadas nos modos FOR XML RAW/AUTO/PATH e a diretiva TYPE, ao invés de utilizar o modo EXPLICIT para gerar as hierarquias. As consultas FOR XML aninhadas podem produzir qualquer XML que você possa gerar usando o modo EXPLICIT. Para obter mais informações, consulte Usar consultas FOR XML aninhadas e diretiva TYPE em consultas FOR XML.

O modo PATH junto com a funcionalidade de consulta FOR XML aninhada fornece a flexibilidade do modo EXPLICIT de maneira mais simples.

Esses modos estão em vigor apenas para a execução da consulta para a qual estão definidos. Elas não afetam os resultados de consultas subsequentes.

FOR XML não é válido para qualquer seleção usada com uma cláusula FOR BROWSE.

Exemplo

A instrução a seguir SELECT recupera informações das tabelas AdventureWorks2012 e Sales.SalesOrderHeader do Sales.Customer banco de dados. Essa consulta especifica o AUTO modo na FOR XML cláusula:

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  

A cláusula FOR XML e os nomes do servidor

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. No entanto, o nome do servidor é retornado como o nome de quatro partes quando a consulta é executada em um servidor de rede.

Por exemplo, considere esta consulta:

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

Quando ServerName é um servidor local, a consulta retorna o seguinte:

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

Quando ServerName é um servidor de rede, a consulta retorna o seguinte:

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

Essa ambiguidade potencial pode ser evitada especificando este alias:

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

Essa consulta retorna o seguinte:

<x LastName="Achong"/>  

Consulte Também

Sintaxe básica da cláusula FOR XML
Usar o modo RAW com FOR XML
Usar o modo AUTO com FOR XML
Utilize o modo EXPLICIT com FOR XML
Usar o modo PATH com FOR XML
OPENXML (SQL Server)
Adicionar namespaces a consultas com WITH XMLNAMESPACES