Tag Archives: xml

XML – RAW – 01

Dando inicio a uma serie de pequenos artigos sobre XML e suas possiveis variações em SQL Server vou começar falando sobre a mais simples de todas, denominada FOR XML RAW. Nela o SQL Server faz uma formatação padrão nos dados e os joga em um XML simples conforme podemos observar abaixo:

--Criando a tabela com os dados de exemplo
IF(OBJECT_ID('TabelaDadosXML') IS NOT NULL)
	DROP TABLE TabelaDadosXML

CREATE TABLE TabelaDadosXML
(
	Nome		VARCHAR(100),
	SobreNome	VARCHAR(100),
	DataDeNasc	DATETIME
)

--Inserindo dados de teste
INSERT INTO TabelaDadosXML(Nome, SobreNome, DataDeNasc)
VALUES
('Nome01', 'SobreNome01', '19910921'),
('Nome02', 'SobreNome02', '19930909'),
('Nome03', 'SobreNome03', '19931009'),
('Nome04', 'SobreNome04', '19931109'),
('Nome05', 'SobreNome05', '19931209'),
('Nome06', 'SobreNome06', '19850109'),
('Nome07', 'SobreNome07', '19860109'),
('Nome08', 'SobreNome08', '19880109'),
('Nome09', 'SobreNome09', '19980109'),
('Nome10', 'SobreNome10', '19980909')

--RAW
SELECT
	a.Nome,
	a.SobreNome,
	DATEDIFF(YEAR, a.DataDeNasc, GETDATE()) As Idade
FROM TabelaDadosXML a
FOR XML RAW
/*
<row Nome="Nome01" SobreNome="SobreNome01" Idade="22" />
<row Nome="Nome02" SobreNome="SobreNome02" Idade="20" />
<row Nome="Nome03" SobreNome="SobreNome03" Idade="20" />
<row Nome="Nome04" SobreNome="SobreNome04" Idade="20" />
<row Nome="Nome05" SobreNome="SobreNome05" Idade="20" />
<row Nome="Nome06" SobreNome="SobreNome06" Idade="28" />
<row Nome="Nome07" SobreNome="SobreNome07" Idade="27" />
<row Nome="Nome08" SobreNome="SobreNome08" Idade="25" />
<row Nome="Nome09" SobreNome="SobreNome09" Idade="15" />
<row Nome="Nome10" SobreNome="SobreNome10" Idade="15" />
*/

Ou seja, o xml veio sem formatação nenhuma, colocando todos os dados como atribudos de uma TAG chamada ROW
Para se alterar o nome desta tag basta alterar para:

SELECT
	a.Nome,
	a.SobreNome,
	DATEDIFF(YEAR, a.DataDeNasc, GETDATE()) As Idade
FROM TabelaDadosXML a
FOR XML RAW('LinhaDeDados')

Fazendo com que o seguinte output seja gerado

/*
<LinhaDeDados Nome="Nome01" SobreNome="SobreNome01" Idade="22" />
<LinhaDeDados Nome="Nome02" SobreNome="SobreNome02" Idade="20" />
<LinhaDeDados Nome="Nome03" SobreNome="SobreNome03" Idade="20" />
<LinhaDeDados Nome="Nome04" SobreNome="SobreNome04" Idade="20" />
<LinhaDeDados Nome="Nome05" SobreNome="SobreNome05" Idade="20" />
<LinhaDeDados Nome="Nome06" SobreNome="SobreNome06" Idade="28" />
<LinhaDeDados Nome="Nome07" SobreNome="SobreNome07" Idade="27" />
<LinhaDeDados Nome="Nome08" SobreNome="SobreNome08" Idade="25" />
<LinhaDeDados Nome="Nome09" SobreNome="SobreNome09" Idade="15" />
<LinhaDeDados Nome="Nome10" SobreNome="SobreNome10" Idade="15" />
*/
Anúncios

SQL Server Basico 7 – Gerando um XML

Algumas pessoas pessoas possuem muitas duvidas quanto ao tipo de arquivo XML, a questão é que um arquivo XML pode parecer muito complexo quando olhado pela primeira vez, porem, com o passar do tempo se tornara bem intuitivo, simples e facil de ser utilizado.

O que é um arquivo XML?
Um arquivo XML é um arquivo estruturado de texto, ou seja, aonde o texto no arquivo segue um padrão, assim como em programação HTML.

O que tem um arquivo XML?
Basicamente um arquivo XML possui tags(Que são denominadas nós) e as informações em si.

Um exemplo…..

<Empresa>
	<Funcionarios>
		<Nome>Fabrizzio</Nome>
		<Nome> Giovanni</Nome>
	</Functionarios>
</Empresa>

Neste artigo (O primeiro de uma serie sobre XML), colocarei o basico sobre como criar uma estrutura XML a partir de uma tabela.

Abaixo explicações e codificações.


CREATE TABLE Funcionarios
(
	Id_Departamento INT,
	nm_Funcionario VARCHAR(100),
	sn_Funcionario VARCHAR(100)
)

INSERT INTO Funcionarios VALUES
(1, 'Fabrizzio','Caputo'),
(2, 'Camila', 'Lira'),
(1, 'Marco', 'Caputo')

SELECT *
FROM Funcionarios

--Criando uma estrutura XML basica de forma automatica
SELECT *
FROM Funcionarios
FOR XML AUTO
/*
<Funcionarios Id_Departamento="1" nm_Funcionario="Fabrizzio" sn_Funcionario="Caputo" />
<Funcionarios Id_Departamento="2" nm_Funcionario="Camila" sn_Funcionario="Lira" />
<Funcionarios Id_Departamento="1" nm_Funcionario="Marco" sn_Funcionario="Caputo" />
*/

--CRIANDO DE FORMA AUTOMATICA ESPECIFICANDO UM ROOT
SELECT *
FROM Funcionarios
FOR XML AUTO, ROOT('Empresa')
/*
<Empresa>
  <Funcionarios Id_Departamento="1" nm_Funcionario="Fabrizzio" sn_Funcionario="Caputo" />
  <Funcionarios Id_Departamento="2" nm_Funcionario="Camila" sn_Funcionario="Lira" />
  <Funcionarios Id_Departamento="1" nm_Funcionario="Marco" sn_Funcionario="Caputo" />
</Empresa>
*/
/*
Por que é importante colocar um root?
	Tendo em vista e necessidade de se manter sempre as boas praticas em programação, seja para voce ou para as demais
	pessoas que irão utilizar e mexer no seu sistema, colocar o root faz com que nunca exista informações jogadas em um 

arquivo XML
*/

--GERANDO INFORMAÇÕES ENTRE TAGS
SELECT Id_Departamento, nm_Funcionario, sn_Funcionario
FROM Funcionarios
FOR XML PATH('Empresa'), ROOT('Geral')
/*
<Geral>
  <Empresa>
    <Id_Departamento>1</Id_Departamento>
    <nm_Funcionario>Fabrizzio</nm_Funcionario>
    <sn_Funcionario>Caputo</sn_Funcionario>
  </Empresa>
  <Empresa>
    <Id_Departamento>2</Id_Departamento>
    <nm_Funcionario>Camila</nm_Funcionario>
    <sn_Funcionario>Lira</sn_Funcionario>
  </Empresa>
  <Empresa>
    <Id_Departamento>1</Id_Departamento>
    <nm_Funcionario>Marco</nm_Funcionario>
    <sn_Funcionario>Caputo</sn_Funcionario>
  </Empresa>
</Geral>
*/

--MESCLANDO INFORMAÇÕES NAS TAGS E ENTRE TAGS
SELECT Id_Departamento As '@Dpto', nm_Funcionario, sn_Funcionario
FROM Funcionarios
FOR XML PATH('Empresa'), ROOT('Geral')
/*
<Geral>
  <Empresa Dpto="1">
    <nm_Funcionario>Fabrizzio</nm_Funcionario>
    <sn_Funcionario>Caputo</sn_Funcionario>
  </Empresa>
  <Empresa Dpto="2">
    <nm_Funcionario>Camila</nm_Funcionario>
    <sn_Funcionario>Lira</sn_Funcionario>
  </Empresa>
  <Empresa Dpto="1">
    <nm_Funcionario>Marco</nm_Funcionario>
    <sn_Funcionario>Caputo</sn_Funcionario>
  </Empresa>
</Geral>
*/