none
bulk insert de um xml RRS feed

  • Pergunta

  • Pessoal

     Gostaria de saber qual seria o comando para inserir o conteudo de um xml direto no banco de dados, pois tentei de varias formas até criando o schema mais não deu certo, alguém teria alguma dica ?

    Exemplo :

    dados.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <Root>
         <Dados>
             <Nome>Lucas</Nome>
             <Local>A1</Local>
             <Setor>B1</Setor>
          </Dados>
          <Dados>
             <Nome>Fernanda</Nome>
             <Local>A1</Local>
             <Setor>B2</Setor>
          </Dados>
          <Dados>
             <Nome>Carolina</Nome>
             <Local>A1</Local>
             <Setor>B3</Setor>
          </Dados>
          <Dados>
             <Nome>Bruna</Nome>
             <Local>A2</Local>
             <Setor>B1</Setor>
          </Dados>
    </Root>

    tabela

    CREATE TABLE [dbo].[tbl_Localizador](
     [Nome] [varchar](50) NULL,
     [Local] [varchar](5) NULL,
     [setor] [varchar](5) NULL
    )

    • Movido Gustavo Maia Aguiar quinta-feira, 1 de abril de 2010 19:29 (De:SQL Server - Desenvolvimento Geral)
    quinta-feira, 1 de abril de 2010 09:43

Todas as Respostas

  • Ola neibala

    Segue uma forma que testei e funcionou. O arquivo XML deve estar no servidor  de BD

     

    CREATE TABLE #tbl_Localizador(
     [Nome] [varchar](50) NULL,
     [Local] [varchar](5) NULL,
     [setor] [varchar](5) NULL
    )
    INSERT INTO #tbl_Localizador([Nome], [Local], [Setor])

    SELECT x.value('Nome[1]', 'CHAR(100)')  AS TESTE
           , x.value('Local[1]', 'CHAR(100)')  AS [Local]
           , x.value('Setor[1]', 'CHAR(100)')  AS Setor
    FROM (
      SELECT CAST(bulkcolumn AS XML) AS data
        FROM OPENROWSET(  BULK 'dados.xml', SINGLE_BLOB)
        as x
    ) A
    CROSS APPLY data.nodes ('/Root/Dados') i(x)


    select * from #tbl_Localizador

     

    Espero ter ajudado.

    Abraços.


    hã?
    quinta-feira, 1 de abril de 2010 15:42
  •  

    Vou verificar depois eu te aviso, mais desde já agradeço a ajuda e atenção.

     

    sexta-feira, 2 de abril de 2010 01:14
  • DTito

      Seguindo a sua dica consegui fazer o insert do xml, só que na parte de inserir um campo data no seguinte formato 01/04/2010 01:04:41, quando grava no banco esta gravando assim 04/01/2010 01:04:41, esta trocando o dia pelo mês, quando seria o caminho para acertar este problema ao gravar no Banco de forma correta ?

    dados_xml.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <Root>
         <Dados>
             <Codigo>100</Codigo>
             <Nome>Lucas</Nome>
             <Local>A1</Local>
             <Setor>B1</Setor>
             <Cadastro>01/04/2010 01:04:41</Cadastro>
          </Dados>
          <Dados>
       <Codigo>200</Codigo>
             <Nome>Fernanda</Nome>
             <Local>A1</Local>
             <Setor>B2</Setor>
             <Cadastro>02/04/2010 02:04:42</Cadastro>
          </Dados>
          <Dados>
             <Codigo>300</Codigo>
             <Nome>Carolina</Nome>
             <Local>A1</Local>
             <Setor>B3</Setor>
             <Cadastro>03/04/2010 22:04:43</Cadastro>
          </Dados>
          <Dados>
             <Codigo>400</Codigo>
             <Nome>Bruna</Nome>
             <Local>A2</Local>
             <Setor>B1</Setor>
             <Cadastro>04/04/2010 14:04:44</Cadastro>
          </Dados>
    </Root>

      INSERT INTO tbl_Localizador_XML([Codigo],[Nome], [Local], [Setor],[Cadastro])
    SELECT Dados_XML.value('Codigo[1]', 'int') AS Codigo
           , Dados_XML.value('Nome[1]', 'CHAR(100)') AS Nome
           , Dados_XML.value('Local[1]', 'CHAR(100)') AS [Local]
           , Dados_XML.value('Setor[1]', 'CHAR(100)') AS Setor
           , Dados_XML.value('Cadastro[1]', 'datetime') AS Cadastro
    FROM (
      SELECT CAST(bulkcolumn AS XML) AS Elementos
        FROM OPENROWSET(  BULK 'T:\XML\Tabela\dados_xml.xml', SINGLE_BLOB)
        as Dados_XML
    ) A
    CROSS APPLY Elementos.nodes ('/Root/Dados') i(Dados_XML)

     

    sábado, 3 de abril de 2010 03:45
  • neibala,

    Já vi isso acontecer devido a diferenças de configurações regionais - regional settings - entre o sistema operacional e o sql server. Normalmente, o sql server adota padrão americano de data. Verifique como está a data do seu SO.

    Caso estejam corretas, talvez tenha que usar um função de conversão de data - CONVERT - para que a inserção seja feita no formato correto. 

    Abraço

     

    DTito


    hã?
    • Sugerido como Resposta DTito quarta-feira, 7 de abril de 2010 17:11
    domingo, 4 de abril de 2010 02:09