|

Como Obter o Resultado de uma Consulta no Formato XML (SQL Server)

Compartilhe :

Além do formato tabular tradicional, o SQL Server também consegue devolver o resultado de uma consulta diretamente em XML, usando a cláusula FOR XML. Isso é útil quando o resultado da consulta vai ser consumido por outro sistema, exportado para um arquivo ou integrado a uma API que espera XML como entrada.

Neste post você vai ver como gerar XML a partir de uma consulta simples e conhecer os diferentes modos disponíveis. Se além do XML você também precisar do schema (XSD) da estrutura retornada, veja o post sobre como obter o resultado de uma consulta em XML e o seu schema.

Os exemplos abaixo usam o banco de exemplo Northwind. Se você está em uma instância recente do SQL Server, vale lembrar que o Northwind não vem mais instalado por padrão desde a versão 2005; é preciso baixar e restaurar o script de exemplo separadamente a partir do repositório oficial da Microsoft. Nas instâncias mais novas, também é comum usar o AdventureWorks ou o WideWorldImporters como bancos de exemplo.

O exemplo básico com FOR XML AUTO

Para transformar o resultado de uma consulta em XML, basta adicionar FOR XML AUTO ao final do SELECT:

SELECT * FROM Orders
FOR XML AUTO;

No modo AUTO, o SQL Server monta a estrutura do XML automaticamente, criando um elemento para cada linha, nomeado de acordo com a tabela de origem, e as colunas viram atributos desse elemento. É a forma mais simples de começar a trabalhar com FOR XML, sem precisar definir manualmente a estrutura do resultado.

Outros modos do FOR XML

Além de AUTO, existem outros modos que controlam de forma diferente como o XML é montado:

Modo O que faz
RAW Gera um elemento genérico <row> por linha, com as colunas como atributos. Estrutura simples, sem hierarquia entre tabelas
AUTO Monta a estrutura de elementos automaticamente, com base nas tabelas e colunas usadas na consulta
EXPLICIT Permite controlar manualmente, coluna por coluna, a estrutura do XML gerado. Mais flexível, porém com uma sintaxe bem mais complexa
PATH Permite definir a estrutura do XML usando aliases nas colunas da consulta, com controle fino e sintaxe mais simples que EXPLICIT

Exemplo com RAW

SELECT OrderID, CustomerID, OrderDate
FROM Orders
FOR XML RAW;

Exemplo com PATH

O modo PATH, disponível desde o SQL Server 2005, costuma ser a opção preferida hoje quando se precisa de controle sobre nomes de elementos, atributos e hierarquia, sem cair na complexidade do EXPLICIT:

SELECT
    OrderID AS '@Id',
    CustomerID AS 'Cliente',
    OrderDate AS 'Data'
FROM Orders
FOR XML PATH('Pedido'), ROOT('Pedidos');

Elementos em vez de atributos

Por padrão, o modo AUTO transforma as colunas em atributos do elemento. Se você preferir que as colunas virem elementos filhos, em vez de atributos, use a opção ELEMENTS:

SELECT * FROM Orders
FOR XML AUTO, ELEMENTS;

Conclusão

FOR XML AUTO é a forma mais simples de transformar o resultado de uma consulta em XML no SQL Server, e continua funcionando normalmente nas versões atuais. Para casos mais simples, sem hierarquia, RAW também resolve bem. Já quando é preciso controlar com precisão a estrutura do XML gerado, como nomes de elementos, atributos e agrupamentos, PATH costuma ser a melhor escolha, por unir flexibilidade com uma sintaxe relativamente simples.

Posts Similares