sexta-feira, 11 de outubro de 2013

Pegar conteúdo de tags XML, e gravar em tabelas do SQL SERVER.

Neste exemplo, eu vou usar um arquivo de nota fiscal XML. A estrutura abaixo traz os campos desejados do XML e os grava em uma tabela do SQL SERVER.

OBS: Isso é somente uma ideia de implementação, é necessário adapta-lo ao seu caso e ao seu arquivo XML.

Mais informações sobre os comandos BULK e OPENROWSET, e também sobre a estrutura em árvore do XML explicando o conceito de nós, hierarquia e etc.



--Variável onde vai ser carregado o conteúdo do arquivo XML.

DECLARE @XML XML


/*
Carrega o conteúdo do arquivo XML pra a variável @XML, é necessário identificar o NAMESPACE do arquivo XML que no nosso caso é, ''http://www.portalfiscal.inf.br/nfe".
*/

SET @XML = (
SELECT CAST(BulkColumn AS XML)
FROM OPENROWSET(BULK N'c:\projetos\NF_EXEMPLO.xml', SINGLE_BLOB)
AS Arquivo)
;WITH XMLNAMESPACES(DEFAULT 'http://www.portalfiscal.inf.br/nfe'

/*
Faz um SELECT em nós do arquivo XML, trazendo o conteúdo de suas TAGS, e armazenando em uma tabela temporária #Auxiliar.
*/

SELECT INTO #Auxiliar
       NFe.value('../infProt[1]/chNFe[1]','varchar(100)') AS chNFe
,      NFe.value('../infProt[1]/dhRecbto[1]','varchar(20)') AS dhRecbto
,      NFe.value('../infProt[1]/nProt[1]','varchar(100)') AS nProt
FROM @XML.nodes('//infProt') AS NFes(NFe)

/*
Atualiza a tabela desejada a partir do conteúdo na tabela temporária.
*/

UPDATE TABELA_DESEJADA SET campo1, campo2, campo3
FROM TABELA_DESEJADA
INNER JOIN
(SELECT *FROM #Auxiliar)

--"Dropa" a tabela temporária. 

IF OBJECT_ID('tempdb..#Auxiliar') IS NOT NULL
DROP TABLE #Auxiliar;

Nenhum comentário:

Postar um comentário