Construindo XML usando FOR XML
Uma consulta SELECT retorna resultados como um conjunto de linhas. Opcionalmente, é possível recuperar resultados formais de uma consulta SQL como XML especificando a cláusula FOR XML na consulta. É possível usar a cláusula FOR XML em consultas de nível superior e em subconsultas. A cláusula FOR XML de nível superior pode ser usada apenas 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:
RAW
AUTO
EXPLICIT
PATH
O modo RAW gera um único elemento <row> por linha no conjunto de linhas retornado pela instrução SELECT. É possível gerar hierarquia de 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. 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.
O modo EXPLICIT permite mais controle sobre a forma do XML. É possível misturar atributos e elementos à vontade para decidir a forma do XML. Um formato específico é necessário para o conjunto de linhas resultante que é gerado por causa da execução da consulta. Em seguida, esse formato do conjunto de linhas é mapeado na forma do XML. 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.
No entanto, a escrita de consultas no modo EXPLICIT pode ser trabalhosa. É 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. As consultas FOR XML aninhadas podem produzir qualquer XML que possa ser gerado usando o modo EXPLICIT. Para obter mais informações, consulte Consultas FOR XML aninhadas e Diretiva TYPE em consultas FOR XML.
O modo PATH em conjunto com a funcionalidade de consulta FOR XML aninhada fornece a flexibilidade do modo EXPLICIT de uma maneira mais simples.
Esses modos estão em efeito apenas para a execução da consulta para a qual eles estão definidos. Eles não afetam os resultados de nenhuma consulta subseqüente.
Cláusulas COMPUTE BY e FOR BROWSE
FOR XML não é válido para nenhuma seleção usada com uma cláusula COMPUTE BY ou FOR BROWSE. Por exemplo, a cláusula a seguir resultará em um erro:
SELECT TOP 5 SalesOrderID, UnitPrice
FROM Sales.SalesOrderDetail
ORDER BY SalesOrderID COMPUTE SUM(UnitPrice) BY SalesOrderID
FOR XML AUTO
Cláusula FOR XML e nomes de servidores
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.AdventureWorks.Person.Contact
FOR XML AUTO
Quando ServerName for um servidor local, a consulta retornará seguinte:
<AdventureWorks.Person.Contact LastName="Achong" />
Quando ServerName for um servidor de rede, a consulta retornará seguinte:
<ServerName.AdventureWorks.Person.Contact LastName="Achong" />
Essa ambigüidade potencial pode ser evitada especificando este alias:
SELECT TOP 1 LastName
FROM ServerName.AdventureWorks.Person.Contact x
FOR XML AUTO
Essa consulta retorna o seguinte:
<x LastName="Achong"/>
Consulte também