OpenXML SQL SERVER E XML
Quarta-feira, 28 de Maio, 2008XML (eXtensible Markup Language) - quem nunca ouviu falar pode parar de programar, xml e uma linguagem que engloba todas as outras, primeiro pela sua versatilidade e segundo pelo seu poder de armazenar e gerenciar dados. SQL Server um ótimo banco de dados mas como nada e perfeito porque não unir o útil ao agradável e conseguir criar uma poderosa ferramenta de dados com XML e SQL SERVER e o que vamos aprender nesse artigo que eu vou mostrar para vocês.
Vamos criar uma procedure que le arquivos xml e grava os dados em uma tabela
primeiramente vamos criar uma tabela simples onde iremos armazenar os dados que vira do xml
-
CREATE TABLE DADOS_XML (
-
ID_DOCUMENTO INT NOT NULL,
-
TX_DADOS nvarchar(50),
-
TX_DESCRICAO nvarchar(50),
-
PRIMARY KEY (ID_DOCUMENTO));
bom já temos a tabela, mas agora precisamos de um arquivo xml e de dados para inserirmos na tabela.
para um arquivo xml comum usamos a tag < ?xml version="1.0" enconding="utf-8"?> como cabeçalho de um documento xml mas para o sql server não e necessários usarmos cabeçalho. Bom temos agora o nosso arquivo xml que vamos usar na procedure, Agora somente nos resta montar a procedure para gravar os dados na tabela. comecaremos declarando as variáveis.
-
DECLARE @ID_DOCUMENTO int
-
DECLARE @TX_DADOS nvarchar(50)
-
DECLARE @TX_DESCRICAO nvarchar(50)
-
--variavel que declara o doc xml, e efetua o retorno
-
DECLARE @xml_text xml, @i INT
-
SELECT @xml_text = '<dados_xml><tbl_dados_xml ID_DOCUMENTO = "1" TX_DADOS = "Meu Primeiro exemplo xml SQL SERVER" TX_DESCRICAO = "WordPress xml document"/></dados_xml>'
-
--Lê o xml usando MSXML parser (Msxml2.dll), funcionalida que veio pela primeira vez no sql 2000
-
EXEC sp_xml_preparedocument @i OUTPUT, @xml_text
-
--Pega a primeiro valor do xml dentro da TBL_DADOS_XML que e a tag id_document
-
SET @ID_DOCUMENTO = @xml_text.value('(/DADOS_XML/TBL_DADOS_XML/@ID_DOCUMENTO)[1]', 'nvarchar(50)')
-
--Mesma coisa que a função acima so que pega a tag TX_DADOS, esse [1] quer dizer que so vai pegar o primeiro valor veja bem se o documento for tiver duas tags iguais ou seja mais de um registro a ser inserido no banco ele nao vai pegar, explicarei como fazer isso e um outro artigo
-
SET @TX_DADOS = @xml_text.value('(/DADOS_XML/TBL_DADOS_XML/@TX_DADOS)[1]', 'nvarchar(50)')
-
SET @TX_DESCRICAO = @xml_text.value('(/DADOS_XML/TBL_DADOS_XML/@TX_DESCRICAO)[1]', 'nvarchar(50)')
-
-- Pega o valores que foram retornado do xml e grava no banco
-
INSERT INTO DADOS_XML VALUES (@ID_DOCUMENTO, @TX_DADOS, @TX_DESCRICAO)
Por enquanto e só, isso torna uma aplicação muito mais rápida quando você tem que inserir muito registros em várias tabelas ao mesmo tempo. Bom no próximo artigo vamos fazer um exemplo em c#
Rafael Corazzi