Inquiridor
bulk insert de um xml

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)
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_LocalizadorEspero ter ajudado.
Abraços.
hã? -
-
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) -
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