Se você vem acompanhando nossas matérias até hoje, certamente verá que temos falado sempre de segurança. Correto?
Hoje vamos mudar um pouco o foco de nossa matéria para a “praticidade”.
Não sei se você também pensa assim, mas… você já acessou um site de notícias carregado de informações e lento?
A única vontade que sinto ao acessar um site assim, é a de fechar o navegador, e você?
Por esse e outros motivos, vamos falar hoje sobre como gerar XML através do SQL Server!
Para facilitar seu aprendizado e/ou testes, vamos colocar no ficheiro “arquivo.zip” as informações que você precisa. Ok?
Para iniciarmos nossas atividades, precisaremos criar uma tabela contendo os campos a seguir:
– Nome, Sobrenome, Login, Email, Sexo, Data de Cadastro, Tipo, CPF, CNPJ, RazaoSocial, RG, DataNascimento, Logradouro, Numero, Complemento, Referencia, Bairro, Cidade, Estado, Pais, Telefone1, Telefone2, Celular, Fax.
OBS.: Em nossa simulação, não utilizaremos todos os campos. Caso você queira selecionar os principais, não tem problemas.
Bem… antes de colocarmos a mão na massa, digamos que você tenha 3 tabelas com os seguintes nomes: Conta, Usuario e Endereço.
Terá também um sistema interno que receberá todos os dias os novos usuários cadastrados em seu site, porém, na hora de apresentá-los, precisará retornar todos os dias os já cadastrados e os antigos juntos (todos em formato XML).
Não estamos aqui falando de 6 ou 10 usuários e sim de 200.000 cadastros.
Por esse motivo, precisamos pensar sobre o desempenho deste Servidor!
Não sei se você já trabalhou com XML, mas ele deverá seguir o seguinte formato:
Para retorná-los, você poderá fazer através de uma Procedure (que retorna todos os registros para o meu objeto), entre diversas opções (cada qual especificada dentro de sua linguagem de programação preferencial).
OBS.: Trabalhando com a Procedure, sua aplicação poderá ficar até 60% mais rápida, o que dá uma maior estabilidade ao Servidor e eficiência ao script que está sendo trabalhado.
Para exemplificar vamos dar um Select nos campos Nome, Sobrenome e E-mail (conforme o exemplo abaixo):
------EFETUANDO UM SELECT ------
CREATE PROCEDURE GerarXMLUsuarios AS BEGIN
SELECT [UsuNome], [UsuSobrenome], [UsuEmail] FROM [tbUsuarios] END
------
Feito isso, utilizaremos a cláusula FOR XML.
O FOR XML tem por finalidade organizar e retorna as informações em formato XML.
Se você nunca utilizou este recurso, o FOR XML, veja que ele pode ser utilizado das seguintes maneiras:
Modo Auto
Retorna os resultados da consulta como elementos XML simples e alinhado, ou seja, cada tabela indicada depois da cláusula FROM, é um elemento do XML , as colunas indicadas no SELECT são atributos. Utilizamos o AS para nomear os elementos:
Exemplo:
SELECT [UsuNome] AS Nome, [UsuSobrenome] AS Sobrenome, [UsuEmail] AS Email
FROM [tbUsuarios] AS UsuariosGerais FOR XML AUTO
OBS.: Utilizando tal recurso, você terá um resultado como este:
OBS.:Se alguma coluna do Select for de uma tabela já identificada, ela é colocada como atributo (conforme visto acima), se for de uma tabela diferente será adicionada como elemento dentro do elemento pai, que é a 1º tabela especificada:
SELECT UsuariosGerais.[UsuNome] AS Nome,
UsuariosGeraisIntro.[UsuSobrenome] AS Sobrenome,
UsuariosGerais.[UsuEmail] AS Email FROM [tbUsuarios] AS UsuariosGerais
INNER JOIN [tbUsuarios] AS UsuariosGeraisIntro ON
UsuariosGerais.UsuCodigo = UsuariosGeraisIntro.UsuCodigo FOR XML AUTO
Para este tipo de select, receberemos algo assim:
OBS.: Veja que como estou pegando o Sobrenome de uma “tabela diferente”, ele criou uma nova Tag dentro da principal e aplicou o atributo Sobrenome a ela.
Modo RAW
No modo RAW cada resultado da instrução SELECT vem em linha de acordo com o nome fornecido ao RAW.
Veja o exemplo abaixo:
SELECT [UsuNome] AS Nome, [UsuSobrenome] AS Sobrenome,
[UsuEmail] AS Email FROM [tbUsuarios] AS UsuariosGerais FOR XML RAW
SELECT [UsuNome] AS Nome, [UsuSobrenome] AS Sobrenome, [UsuEmail] AS Email
FROM [tbUsuarios] AS UsuariosGerais FOR XML RAW('Teste')
Para este select, receberemos algo assim:
< Teste Nome="Ipsum" Sobrenome="Teste" Email="ipsum@teste.com.br" />
< Teste Nome="Dolor" Sobrenome="Teste" Email="dolor@teste.com.br" />
< Teste Nome="Lorem Ipsum" Sobrenome="Teste" Email="loremipsum@teste.com.br" />
OBS.: Diferente do AUTO, podemos nomear nossas elementos de acordo com o que colocamos no RAW e tabelas diferentes não são criadas como novos elementos filhos.
Modo PATH
O modo PATH tem uma maneira simples de misturar nós de elementos e atributos, e para propriedades mais complexas o PATH pode ser utilizado para trazer resultados com mais facilidade. Os nomes ou alias de colunas são tratados como expressões XPath.
Veja o exemplo abaixo:
SELECT [UsuNome] AS '@Nome', [UsuSobrenome] AS Sobrenome,
[UsuEmail] AS Email FROM [TIKCUsuarios] AS Usuarios FOR XML PATH
Para este Select, teremos um resultado como o exemplo a seguir:
OBS.: Veja que onde colocamos o @ temos um Atributo, os que estão sem o @ são Elementos.
Temos uma outra alternativa, veja:
SELECT [UsuCodigo] AS '@ID', [UsuNome] AS 'Nome/Nome' ,
[UsuSobrenome] AS 'Nome/Sobrenome', [UsuEmail] AS 'Email'
FROM [TIKCUsuarios] AS Usuarios FOR XML PATH('Usuarios')
Para este Select, temos o seguinte resultado:
Obs.: Veja que neste exemplo estamos utilizando registros pai e filho.
Quando colocamos “/” entre os nomes dos elementos, o elemento anterior a “/” é considerado como pai e o que vem a seguir é considerado como elemento filho.
É importante notar que o @ só pode ser usado se for o 1º elemento, ou se o elemento anterior for @ também. No caso se colocássemos o @ no Email dará um erro.
Bem… essas são algumas opções que você pode começar a usar no seu dia a dia.
Temos ainda opções mais avançadas como o Explicit, Type, entre várias outras opções, mas fogem um pouco deste artigo, já que é voltado a quem está começando com o XML junto ao SQL Server.
Bem… após selecionar o conteúdo corretamente, você terá de trabalhar esse resultado!
Te incentivamos a conhecer mais sobre o XML em matérias específicas.
Caso você tenha alguma dúvida, me coloco a disposição para lhe ajudar.
DOWNLOAD: Descarregue o código utilizado neste tutorial: MSSQL – Gerando XML Através Do MsSQL Server, em formato .zip.