Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Uma SELECT consulta retorna resultados como um conjunto de linhas. Opcionalmente, você pode recuperar resultados formais de uma consulta SQL como XML especificando a FOR XML cláusula na consulta. A FOR XML cláusula pode ser usada em consultas de nível superior e em subconsultas. A cláusula de nível FOR XML superior só pode ser usada na SELECT instrução. Em subconsultas, FOR XML pode ser usado nas INSERTinstruções , UPDATEe DELETE .
FOR XML também pode ser usado em declarações de atribuição.
Em uma FOR XML cláusula, você especifica um destes modos:
RAWAUTOEXPLICITPATH
O RAW modo gera um único <row> elemento por linha no conjunto de linhas que é retornado pela SELECT instrução. Você pode gerar hierarquia XML escrevendo consultas aninhadas FOR XML .
O AUTO modo gera aninhamento no XML resultante usando heurísticas baseadas na maneira como a SELECT instrução é especificada. Você tem controle mínimo sobre a forma do XML gerado. As consultas aninhadas FOR XML podem ser escritas para gerar hierarquia XML além da forma XML gerada pela AUTO heurística de modo.
O EXPLICIT modo permite mais controle sobre a forma do XML. Você pode misturar atributos e elementos à vontade para decidir a 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 é então mapeado na forma XML. O poder do modo é misturar atributos e elementos à vontade, criar wrappers e propriedades complexas aninhadas, criar valores separados por EXPLICIT espaço (por exemplo, o OrderID atributo pode ter uma lista de valores de ID de ordem) e conteúdo misto.
No entanto, as consultas do modo de escrita EXPLICIT podem ser complicadas. Você pode usar alguns dos novos FOR XML recursos, como escrever aninhado FOR XML RAW, AUTOou PATH consultas de modo e a TYPE diretiva, em vez de usar EXPLICIT o modo para gerar as hierarquias. As consultas aninhadas FOR XML podem produzir qualquer XML que você possa gerar usando o EXPLICIT modo. Para obter mais informações, consulte Usar consultas FOR XML aninhadas e diretiva TYPE em consultas FOR XML.
O PATH modo juntamente com o recurso de consulta aninhada FOR XML fornece a flexibilidade do modo de EXPLICIT uma maneira mais simples.
Esses modos estão em vigor apenas para a execução da consulta para a qual estão definidos. Eles não afetam os resultados de quaisquer consultas subsequentes.
FOR XML não é válida para qualquer seleção usada com uma FOR BROWSE cláusula.
Examples
A instrução a seguir SELECT recupera informações das Sales.Customer tabelas e Sales.SalesOrderHeader no AdventureWorks2025 banco de dados. Esta consulta especifica o AUTOFOR XML modo na cláusula:
USE AdventureWorks2022;
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 dos servidores
Quando uma SELECT instrução com uma FOR XML cláusula 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.AdventureWorks2022.Person.Person
FOR XML AUTO;
Servidor local: Quando ServerName é um servidor local, a consulta retorna o seguinte texto:
<AdventureWorks2022.Person.Person LastName="Achong" />
Servidor de rede: Quando ServerName é um servidor de rede, a consulta retorna o seguinte texto:
<ServerName.AdventureWorks2022.Person.Person LastName="Achong" />
Evitar ambiguidade: Esta ambiguidade potencial pode ser evitada especificando este alias:
SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person x
FOR XML AUTO;
Agora, a consulta desambiguada retorna o seguinte texto:
<x LastName="Achong"/>