A partir do SQL Server 2000 é possível extrair de um banco de dados, de maneira direta, dados no formato XML. Esta funcionalidade é de grande ajuda quando falamos de integrações com diversos sistemas, ou extrações de dados para relatórios, dispositivos móveis, arquivos portáveis e etc.
Para gerar um arquivo XML utilizamos a instrução FOR XML, que pode vir acompanhada das opções: RAW, AUTO e EXPLICIT.
Por exemplo, a instrução abaixo:
SELECT cdcliente, nmcliente
FROM dbo.cliente FOR XML raw
Essa instrução nos retornará o seguinte XML:
<row cdcliente=“1” nmcliente=“SQL Server Day”/>
<row cdcliente=“2” nmcliente=“DotNetDay”/>
<row cdcliente=“3” nmcliente=“SQL Saturday Night”/>
<row cdcliente=“4” nmcliente=“Cliente A”/>
<row cdcliente=“5” nmcliente=“Cliente B”/>
<row cdcliente=“6” nmcliente=“Cliente C”/>
<row cdcliente=“7” nmcliente=“Cliente D”/>
A instrução FOR XML com a opção RAW cria o elemento ROW e cada campo é transformado em atributo desse elemento.
A instrução FOR XML com a opção AUTO utiliza o nome da tabela como delimitador de elementos, essa opção pode vir acompanhada do argumento opcional ELEMENT acompanhe o código a seguir:
SELECT cdcliente, nmcliente
FROM dbo.cliente FOR XML AUTO, ELEMENTS
Este código irá gerar o retorno abaixo:
<dbo.cliente>
<cdcliente>1</cdcliente>
<nmcliente>SQL Server Day</nmcliente>
</dbo.cliente>
<dbo.cliente>
<cdcliente>2</cdcliente>
<nmcliente>DotNetDay</nmcliente>
</dbo.cliente>
<dbo.cliente><cdcliente>3</cdcliente>
<nmcliente>SQL Saturday Night</nmcliente>
</dbo.cliente>
<dbo.cliente>
<cdcliente>4</cdcliente>
<nmcliente>Cliente A</nmcliente>
</dbo.cliente>
<dbo.cliente>
<cdcliente>5</cdcliente>
<nmcliente>Cliente B</nmcliente>
</dbo.cliente>
<dbo.cliente>
<cdcliente>6</cdcliente>
<nmcliente>Cliente C</nmcliente>
</dbo.cliente>
<dbo.cliente>
<cdcliente>7</cdcliente>
<nmcliente>Cliente D</nmcliente>
</dbo.cliente>
É importante lembrar que o arquivo XML deve ser composto de u elemento Raíz, veja o retorno à cima com o elemento Raíz:
<Cliente>
<dbo.cliente>
<cdcliente>1</cdcliente>
<nmcliente>SQL Server Day</nmcliente>
</dbo.cliente>
<dbo.cliente>
<cdcliente>2</cdcliente>
<nmcliente>DotNetDay</nmcliente>
</dbo.cliente>
<dbo.cliente><cdcliente>3</cdcliente>
<nmcliente>SQL Saturday Night</nmcliente>
</dbo.cliente>
<dbo.cliente>
<cdcliente>4</cdcliente>
<nmcliente>Cliente A</nmcliente>
</dbo.cliente>
<dbo.cliente>
<cdcliente>5</cdcliente>
<nmcliente>Cliente B</nmcliente>
</dbo.cliente>
<dbo.cliente>
<cdcliente>6</cdcliente>
<nmcliente>Cliente C</nmcliente>
</dbo.cliente>
<dbo.cliente>
<cdcliente>7</cdcliente>
<nmcliente>Cliente D</nmcliente>
</dbo.cliente>
</Cliente>
É muito simples fazer extração para XML desta forma. Aguardo comentários, dúvidas ou sugestões.
Abraços, Rodrigo