Usando XML – A Cláusula FOR XML e o Modo AUTO

Este artigo faz parte da série de artigos sobre a cláusula de consulta FOR XML, suportada pelo SQL Server 2005 e usada para retornar os dados do banco de dados em formato XML. No artigo anterior, introduzimos a cláusula FOR XML, vimos a estrutura sintática do comando, uma breve descrição dos diferentes modos de retorno XML (RAW, AUTO, EXPLICIT e PATH), e alguns exemplos práticos do uso do modo RAW. Neste artigo continuaremos o estudo da cláusula FOR XML, detalhando o uso do modo AUTO.

O que é o modo de consulta AUTO

O modo de consulta AUTO produz uma representação XML das entidades envolvidas na cláusula de consulta. Considere os seguintes recursos do modo AUTO:

  • Cada linha retornada pela consulta é representada como um elemento XML com o mesmo nome da tabela de origem, ou o alias usado na consulta.
  • Cada JOIN da consulta resulta em um elemento XML aninhado, reduzindo a duplicação de dados. A ordem do JOIN afeta a ordem dos elementos.
  • Use a cláusula ORDER BY para retornar os dados na ordem hierárquica correta, garantindo assim que os elementos filhos estejam agrupados corretamente a um elemento pai.
  • Cada coluna é representada por um atributo, desde que a opção ELEMENTS não seja especificada, e neste caso cada coluna é representada por um elemento filho.
  • Colunas agregadas e cláusulas GROUP BY não são suportadas no modo AUTO, entretanto você usar o modo AUTO para retornar dados agregados de uma view que use a cláusula GROUP BY.

O exemplo abaixo mostra como você pode usar o modo de consulta AUTO para retornar um fragmento XML de uma lista de pedidos.


            SELECT Cust.CustomerID CustID, CustomerType, SalesOrderID

            FROM Sales.Customer Cust
            
              INNER JOIN Sales.SalesOrderHeader [Order]
            
              ON Cust.CustomerID = [Order].CustomerID
            
            ORDER BY Cust.CustomerID
            
            FOR XML AUTO
        

Esta consulta produz um fragmento XML no seguinte formato.

Impressão de cheques pelo sistema

Como podemos ver, a coluna CustomerID e as tabelas Customer e SalesOrderHeader fazem uso de alias para determinar os nomes do atributo e do elemento.

O exemplo abaixo mostra como retornar os mesmos dados como elementos ao invés de atributos usando a opção ELEMENTS.


            SELECT Cust.CustomerID CustID, CustomerType, SalesOrderID

            FROM Sales.Customer Cust
            
              INNER JOIN Sales.SalesOrderHeader [Order]
            
              ON Cust.CustomerID = [Order].CustomerID
            
            ORDER BY Cust.CustomerID
            
            FOR XML AUTO, ELEMENTS
        

Esta consulta produz um fragmento XML no seguinte formato.

Impressão de cheques pelo sistema

Você também pode usar a opção ROOT, como mostrado no exemplo abaixo.


            SELECT Cust.CustomerID CustID, CustomerType, SalesOrderID

            FROM Sales.Customer Cust
            
              INNER JOIN Sales.SalesOrderHeader [Order]
            
              ON Cust.CustomerID = [Order].CustomerID
            
            ORDER BY Cust.CustomerID
            
            FOR XML AUTO, ELEMENTS, ROOT('Orders')
        

Esta consulta produz um fragmento XML no seguinte formato.

Impressão de cheques pelo sistema

No próximo artigo veremos o modo de consulta FOR XML EXPLICIT, uma opção que dá ao desenvolvedor maior flexibilidade e controle na geração de documentos XML. Um grande abraço e até lá.