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