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