miércoles, 12 de junio de 2013

Ejemplo de Exportación e Importación XML con SQL Server.

create database prueba
go

use prueba
go


create table empleados
(
id integer identity primary key,
Nombre Varchar(50),
Apellidos Varchar(100)
)
go

/*
insert into empleados (nombre, apellidos) values ('Jesus','Moreno');
insert into empleados (nombre, apellidos) VALUES ('Jose', 'Moreno');

go
*/
-- exportamos

select * from empleados for xml RAW, root('empleados')-- con atributos
-- generamos con el comando anterior i lo guardamos como empleadostaw.xml para importarlo despues

select * from empleados for xml path, root('empleados'), elements-- con items

--importamos

create table empleados2
(
id integer primary key,
Nombre Varchar(50),
Apellidos Varchar(100)
)
--hacemos un select del xml
/*
DECLARE @doc XML
SELECT @doc = BulkColumn
FROM OPENROWSET(
BULK 'E:\PraticasSQLServer2005\empleadosraw.xml', SINGLE_CLOB
) AS Data

SELECT paises.value('@id','Integer') AS id,
paises.value('@Nombre', 'VARCHAR(50)') AS Nombre,
paises.value('@Apellidos', 'VARCHAR(100)') as Apellidos
FROM @doc.nodes('/empleados/row') AS x1(paises)
*/

-- De esta forma conseguimos importar el fichero xml que ants creamos a la tabla empleados2
-- desde un fichero xml en disco
DECLARE @docHandle int
DECLARE @xmlDocument xml -- or xml type
SELECT @xmlDocument = BulkColumn
FROM OPENROWSET(
BULK 'E:\PraticasSQLServer2005\empleadosraw.xml', SINGLE_CLOB
) AS xmldata
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument
-- Use OPENXML to provide rowset consisting of customer data.
INSERT empleados2
SELECT *
FROM OPENXML(@docHandle, N'/empleados/row')
WITH empleados2
-- Use OPENXML to provide rowset consisting of order data.
EXEC sp_xml_removedocument @docHandle


-- otra forma seria importar el xml pasandole el xml en una cadena de texto
delete from empleados2
go

DECLARE @docHandle int
DECLARE @xmlDocument nvarchar(max) -- or xml type
SET @xmlDocument = N'<empleados>
<row id="1" Nombre="jesus" Apellidos="Moreno" />
<row id="2" Nombre="jose" Apellidos="Moreno" />
<row id="3" Nombre="
jesus" Apellidos="Moreno" />
<row id="4" Nombre="
jose" Apellidos="Moreno" />
<row id="5" Nombre="
jesus" Apellidos="Moreno" />
<row id="6" Nombre="
jose" Apellidos="Moreno" />
<row id="7" Nombre="
jesus" Apellidos="Moreno" />
<row id="8" Nombre="
jose" Apellidos="Moreno" />
</empleados>'
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument
-- Use OPENXML to provide rowset consisting of customer data.
INSERT empleados2
SELECT *
FROM OPENXML(@docHandle, N'/empleados/row')
WITH empleados2
EXEC sp_xml_removedocument @docHandle

No hay comentarios:

Publicar un comentario

Jesús Moreno - Ingeniero Ténico Informático - consultor Informático

Hola, soy Jesús Moreno Ingeniero Técnico Informático en sistemas por la US y propietario de éste blog. Mi trabajo en los ultimos años se ...