SQL Server 2008 – Importando arquivos XML

Me deparei com uma situação hoje, minha noiva me liga, informando que seu servidor SQL Server estava faltando alguns dados em uma determinado tabela e só possui estes arquivos em XML. Isto, realmente é um caso critico ainda mais quando não sabemos por onde começar, pois bem, passei o seguinte exemplo abaixo e tudo foi solucionado.

Aqui está um breve exemplo de importar um arquivo XML em SQL Server tabela. Isto é conseguido usando a opção BULK de OPENROWSET para carregar o arquivo, e então utilizando os recursos XQuery do SQL Server para analisar o XML para o formato tabela normalizada. Este exemplo requer o SQL Server 2005 ou SQL Server 2008.

Primeiro passo: Vamos criar um XML em “C:\produtos.xml”

<Produtos>

<Produtos>

<SKU>1</SKU>

<Desc>Livro</Desc>

</Produtos>

<Produtos>

<SKU>2</SKU>

<Desc>DVD</Desc>

</Produtos>

<Produtos>

<SKU>3</SKU>

<Desc>Video</Desc>

</Produtos>

</Produtos>

Segundo passo: Vamos criar uma tabela para armazenar os dados XML

CREATE TABLE Produtos(

sku INT PRIMARY KEY,

produtos_desc VARCHAR(30));

Terceiro passo: Finalmente, a seguinte declaração abaixo irá carregar o arquivo XMLm analisar os elementos XML, para colunas, e inserir na tabela produtos.

INSERT INTO Produtos (sku, produtos_desc)

SELECT X.produtos.query(‘SKU’).value(‘.’, ‘INT’),

X.produtos.query(‘Desc’).value(‘.’, ‘VARCHAR(30)’)

FROM (

SELECT CAST(x AS XML)

FROM OPENROWSET(

BULK ‘C:\Produtos.xml’,

SINGLE_BLOB) AS T(x)

) AS T(x)

CROSS APPLY x.nodes(‘Produtos/Produtos’) AS X(product);

Resultado:

SELECT sku, produtos_desc

FROM Produtos;

/*

Results:

sku         produtos_desc

———– ————-

1           Livro

2           DVD

3           Video

*/

Existem diversas formas de armazenar um arquivo XML em uma tabela, como o citado abaixo.

INSERT

INTO import.XMLCompanyDetail

(

XMLData

)

SELECT BulkColumn AS XMLData

FROM OPENROWSET (BULK ‘\\local_do_arquivo\arquivos.xml’, SINGLE_BLOB) AS XMLDATA

6 pensamentos sobre “SQL Server 2008 – Importando arquivos XML

    • Paulo,

      Neste caso, teríamos que efetuar uma rotina de importação feita pelo SQL Server Business Intelligence Development Studio. Vou efetuar alguns testes referente ao seu comentário e volta post aqui.

    • Max,

      Neste post não mencionei a declaração do arquivo XML.
      Segue abaixo informações:

      //Criando tabela
      CREATE TABLE Products(
      sku INT PRIMARY KEY,
      product_desc VARCHAR(30));

      //Declarando arquivo XML
      declare @xml xml;
      set @xml = ‘
      1
      Book
      ‘;

      //Importando XML
      INSERT INTO Products (sku, product_desc)
      SELECT X.product.query(‘SKU’).value(‘.’, ‘INT’),
      X.product.query(‘Desc’).value(‘.’, ‘VARCHAR(30)’)
      FROM (
      SELECT CAST(x AS XML)
      FROM OPENROWSET(
      BULK ‘C:\Produtos.xml’,
      SINGLE_BLOB) AS T(x)
      ) AS T(x)
      CROSS APPLY x.nodes(‘Products/Product’) AS X(product);

      //Exibindo resultado
      SELECT sku, product_desc
      FROM Products;

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