Início > SQL Server, XML > Extraindo informações de arquivo XML para o SQL Server

Extraindo informações de arquivo XML para o SQL Server

L&A Soluções – Consultoria em Banco de Dados SQL Server ( Suas informações em boas mãos! )

Ola galera,
Esta semana precisei importar um arquivo XML para o SQL Server, pesquisei em diversos sites, blogs e cheguei ao seguinte…
Vou colocar um exemplo e citar algumas dificuldades que tive:

arquivo: AAS.xml (exemplo do arquivo XML)

http://www.portalfiscal.inf.br/nfe” versao=”2.00″>
http://www.portalfiscal.inf.br/nfe”>

23
00001111

1231111111111

AV 13 DE MAIO
0
FATIMA

arquivo: AAS.sql (Consulta utilizada)

DECLARE @XML XML
SET @XML = (
SELECT CAST(BulkColumn AS XML)
FROM OPENROWSET(BULK N’C:\AAS.xml’, SINGLE_BLOB) — Informe onde se encontra o arquivo XML
AS Arquivo)

;WITH XMLNAMESPACES(DEFAULT ‘http://www.portalfiscal.inf.br/nfe’) — Este ponto deve ser informado o NAMESPACE (xmlns), senão informar esta linha ele não retorna.
SELECT
NFe.value(‘cUF[1]’, ‘int’) AS cUF
,      NFe.value(‘cNF[1]’, ‘int’) AS cNF
,      NFe.value(‘../emit[1]/CNPJ[1]’,’varchar(20)’) AS CNPJ
,      NFe.value(‘../emit[1]/enderEmit[1]/xLgr[1]’,’varchar(max)’) AS xLgr
,      NFe.value(‘../emit[1]/enderEmit[1]/nro[1]’,’varchar(50)’) AS nro
,      NFe.value(‘../emit[1]/enderEmit[1]/xBairro[1]’,’varchar(max)’) AS xBairro
FROM @XML.nodes(‘//infNFe/ide‘) AS NFes(NFe) — Caminho que ira iniciar a varredura

Resultado:

Alguns Links auxiliares
Como importar arquivos XML para o SQL Server – Parte i

Manipulação de XML

Iniciando com XQUERY – NameSpaces tem Solução
Baixar arquivos utilizados

Boa leitura e espero ter ajudado!

Vejam também:

Gerando XML no SQL Server

Manipulação de XML com SQL Server 2008 R2 (Youtube)

Gerando XML no SQL Server – Arte do FOR XML AUTO

Gerando XML no SQL Server – Arte do FOR XML EXPLICIT

Gerando XML no SQL Server – Arte do FOR XML RAW

Gerando XML no SQL Server – Arte do FOR XML PATH

Iniciando com XQuery – Resumo

Como atribuir a uma variável no SQL Server, o valor de uma consulta FOR XML
Alex Souza
L&AConsultoria - Logo

Categorias:SQL Server, XML Tags:
  1. Cristiano
    01/08/2012 às 14:10

    Alex,
    Preciso muito da rotina completa de leitura dos itens e impostos da NFe. Voce possui? Pode ser via venda, doação, emprestimo, etc

    • 05/03/2013 às 17:32

      Boa tarde Cristiano,
      Infelizmente não tenho esta rotina completa!

      Mas pode adapta-la a sua necessidade!

      Abraço

  2. 10/10/2013 às 13:51

    Demorei pra achar uma forma mais simples de rodar e foi justamente esta a escolhida, obrigado!

    • 12/02/2014 às 09:54

      Valeu Leandro!

      Obrigado pela visita no blog e volte sempre!

  3. Alexander Souza
    11/02/2014 às 13:56

    Ola Alex, boa tarde.
    Gostaria de uma ajuda sua para buscar os produtos usando a mesma query que voce esta usando é possivel?

  4. 12/02/2014 às 09:56

    Bom dia Alexander,
    Sim, é possível utilizar a mesma query!
    Utilize a mesma lógica de navegação na arvore do .xml

    Abraço!

  5. 15/11/2014 às 10:06

    Imports System.Xml
    Imports System.IO

    Public Class Form1
    Dim strNomeArquivo As String = “”
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ‘###################### File dialog

    Try
    Dim myStream As Stream = Nothing
    Dim openFileDialog1 As New OpenFileDialog()

    openFileDialog1.InitialDirectory = “c:\”
    openFileDialog1.Filter = “xml files (*.xml)|*.xsd|Todos os Arquivos (*.*)|*.*”
    openFileDialog1.FilterIndex = 2
    openFileDialog1.RestoreDirectory = True

    If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
    Try
    myStream = openFileDialog1.OpenFile()
    strNomeArquivo = openFileDialog1.FileName
    MsgBox(strNomeArquivo)
    If (myStream IsNot Nothing) Then
    ‘ Insert code to read the stream here.
    End If
    Catch Ex As Exception
    MessageBox.Show(“Cannot read file from disk. Original error: ” & Ex.Message)
    Finally
    ‘ Check this again, since we need to make sure we didn’t throw an exception on open.
    If (myStream IsNot Nothing) Then
    myStream.Close()
    End If
    End Try
    End If

    If strNomeArquivo “” Then

    ‘###################### classe xml
    Dim xmlDoc As New XmlDocument
    xmlDoc.Load(strNomeArquivo) ‘LOCAL DO ARQUIVO

    Dim ns As New XmlNamespaceManager(xmlDoc.NameTable)
    Dim nrNFE As New XmlNamespaceManager(xmlDoc.NameTable)
    ns.AddNamespace(“nfe”, “http://www.portalfiscal.inf.br/nfe”)
    nrNFE.AddNamespace(“protNFe”, “http://www.portalfiscal.inf.br/nfe”)

    ‘ <protNFe versao="2.00"

    '
    ‘ 1
    ‘ SVRS20130709084954
    ‘ 33130702886533000148550010001888011480653418

    txtNFE.Text = xmlDoc.SelectSingleNode(“//protNFe:chNFe”, nrNFE).InnerText ‘ AQUI PEGO O NÚMERO DA NFE
    txtCNPJ.Text = xmlDoc.SelectSingleNode(“//nfe:infNFe/nfe:emit/nfe:CNPJ”, ns).InnerText ‘ AQUI PEGO O CNPJ
    txtInscEstadual.Text = xmlDoc.SelectSingleNode(“//nfe:infNFe/nfe:emit/nfe:IE”, ns).InnerText ‘ AQUI PEGO O ENDERECO
    txtFornecedor.Text = xmlDoc.SelectSingleNode(“//nfe:infNFe/nfe:emit/nfe:xNome”, ns).InnerText ‘ AQUI PEGO A RAZAO SOCIAL
    txtFantasia.Text = xmlDoc.SelectSingleNode(“//nfe:infNFe/nfe:emit/nfe:xFant”, ns).InnerText ‘ AQUI PEGO O NOME FANTASIA
    txtEndereco.Text = xmlDoc.SelectSingleNode(“//nfe:infNFe/nfe:emit/nfe:enderEmit/nfe:xLgr”, ns).InnerText ‘ AQUI PEGO O ENDERECO
    txtNumero.Text = xmlDoc.SelectSingleNode(“//nfe:infNFe/nfe:emit/nfe:enderEmit/nfe:nro”, ns).InnerText ‘ AQUI PEGO O ENDERECO
    txtCodMunicipio.Text = xmlDoc.SelectSingleNode(“//nfe:infNFe/nfe:emit/nfe:enderEmit/nfe:cMun”, ns).InnerText ‘ AQUI PEGO O ENDERECO
    txtMunicipio.Text = xmlDoc.SelectSingleNode(“//nfe:infNFe/nfe:emit/nfe:enderEmit/nfe:xMun”, ns).InnerText ‘ AQUI PEGO O ENDERECO
    txtUF.Text = xmlDoc.SelectSingleNode(“//nfe:infNFe/nfe:emit/nfe:enderEmit/nfe:UF”, ns).InnerText ‘ AQUI PEGO O ENDERECO
    txtCEP.Text = xmlDoc.SelectSingleNode(“//nfe:infNFe/nfe:emit/nfe:enderEmit/nfe:CEP”, ns).InnerText ‘ AQUI PEGO O ENDERECO
    txtCodPais.Text = xmlDoc.SelectSingleNode(“//nfe:infNFe/nfe:emit/nfe:enderEmit/nfe:cPais”, ns).InnerText ‘ AQUI PEGO O ENDERECO
    txtPais.Text = xmlDoc.SelectSingleNode(“//nfe:infNFe/nfe:emit/nfe:enderEmit/nfe:xPais”, ns).InnerText ‘ AQUI PEGO O ENDERECO
    txtTelefone.Text = xmlDoc.SelectSingleNode(“//nfe:infNFe/nfe:emit/nfe:enderEmit/nfe:fone”, ns).InnerText ‘ AQUI PEGO O ENDERECO

    End If

    Catch ex As Exception

    End Try

    End Sub

    End Class

  6. 07/08/2015 às 10:11

    Preciso de uma Query para ler a TAG dos produtos. Quando executo o comando a baixo, retorna tudo NULL

    DECLARE @XML XML
    SET @XML = (
    SELECT CAST(BulkColumn AS XML)
    FROM OPENROWSET(BULK N’D:\12836.xml’, SINGLE_BLOB) — Informe onde se encontra o arquivo XML
    AS Arquivo)

    ;WITH XMLNAMESPACES(DEFAULT ‘http://www.portalfiscal.inf.br/nfe’) — Este ponto deve ser informado o NAMESPACE (xmlns)

    SELECT
    NFe.value(‘vProd[1]’, ‘float’) AS vprod,
    NFe.value(‘xProd[1]’, ‘varchar(max)’) AS xprod
    FROM @XML.nodes(‘//infNFe/det’) AS NFes(NFe) — Caminho que ira iniciar a varredura

    Alguém pode me ajudar a resolver esse problema.
    Bem simples o comando que nosso amigo Alex Souza nos apresentou. Se possível, me ajudem dentro desta estrutura. Obrigado a todos.

  1. 24/05/2012 às 21:24
  2. 08/03/2013 às 17:15
  3. 08/03/2013 às 17:19
  4. 11/03/2013 às 20:40
  5. 20/05/2013 às 09:27
  6. 14/10/2013 às 16:20
  7. 05/03/2014 às 16:29
  8. 04/08/2014 às 10:34

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: