Leer fichero xml

19/11/2009 - 12:46 por op.th | Informe spam
Buenos días grupo, tengo un problemilla, más bien una duda, necesito
importar en sqlserver express un fichero xml como el descrito abajo. Más
bien lo que necesito es hacer una select para luego hacer un insert o un
update de los datos. Cual es la forma más correcta? Como haría una
select de un fichero xml de este tipo? Desde .net todo perfecto, pero
desde sqlserver no tengo ni idea y debe ser desde consola :(. Alguién me
puede ayudar?

<propiedades>
<registro>
<no_>1000001</no_>
<name>LOPEZ ALVAREZ</name>
</registro>
<registro>
<no_>1000002</no_>
<name>LOPEZ LOPEZ</name>
</registro>
</propiedades>

Muchas gracias anticipadas.

Un saludo

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
19/11/2009 - 13:06 | Informe spam
En los BOL vienen muchos ejemplos de tratamiento de xml.

Una posibilidad de lo que indicas podría ser:

declare @a xml

set @a = '<propiedades>
<registro>
<no_>1000001</no_>
<name>LOPEZ ALVAREZ</name>
</registro>
<registro>
<no_>1000002</no_>
<name>LOPEZ LOPEZ</name>
</registro>
</propiedades>'

select i2.num.query('./text()') as no_
, i3.nombre.query('./text()') as name
from @a.nodes('propiedades/registro') i1(registro)
CROSS APPLY i1.registro.nodes('./no_') as i2(num)
CROSS APPLY i1.registro.nodes('./name') as i3(nombre)

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"op.th" <op.th.esNOSPAMgmail.com> wrote in message
news:
Buenos días grupo, tengo un problemilla, más bien una duda, necesito
importar en sqlserver express un fichero xml como el descrito abajo. Más
bien lo que necesito es hacer una select para luego hacer un insert o un
update de los datos. Cual es la forma más correcta? Como haría una select
de un fichero xml de este tipo? Desde .net todo perfecto, pero desde
sqlserver no tengo ni idea y debe ser desde consola :(. Alguién me puede
ayudar?

<propiedades>
<registro>
<no_>1000001</no_>
<name>LOPEZ ALVAREZ</name>
</registro>
<registro>
<no_>1000002</no_>
<name>LOPEZ LOPEZ</name>
</registro>
</propiedades>

Muchas gracias anticipadas.

Un saludo
Respuesta Responder a este mensaje
#2 op.th
19/11/2009 - 14:08 | Informe spam
Hola Carlos, muchas gracias por tu respuesta, he leido esa parte de los
bol, el problema que tengo es que no sé abrir el fichero, por ejemplo,
si tengo ubicado el fichero en c:\temp\fichero.xml, como lo abro para
introducirlo en la variable @a???


Carlos Sacristan escribió:
En los BOL vienen muchos ejemplos de tratamiento de xml.

Una posibilidad de lo que indicas podría ser:

declare @a xml

set @a = '<propiedades>
<registro>
<no_>1000001</no_>
<name>LOPEZ ALVAREZ</name>
</registro>
<registro>
<no_>1000002</no_>
<name>LOPEZ LOPEZ</name>
</registro>
</propiedades>'

select i2.num.query('./text()') as no_
, i3.nombre.query('./text()') as name
from @a.nodes('propiedades/registro') i1(registro)
CROSS APPLY i1.registro.nodes('./no_') as i2(num)
CROSS APPLY i1.registro.nodes('./name') as i3(nombre)

Respuesta Responder a este mensaje
#3 Alejandro Mesa
19/11/2009 - 14:43 | Informe spam
Expandiendo un poquito lo dicho por Carlos, puedes usar la funcion OPENROWSET
para importar el archivo hacia una variable XML, y luego podras hacer uso de
lo metodos asociados con este tipo.

Supongamos que el archivo esta en la ruta "c:\temp" y que su nombre es
"test.txt", entonces podemos usar algo asi como:

USE tempdb;
GO
DECLARE @x xml;

SET @x = (
SELECT *
FROM OPENROWSET(BULK N'C:\Temp\test.txt', SINGLE_BLOB) AS [Document]
);

SELECT @x;

SELECT
x.value('(./no_/text())[1]', 'int') AS RegNo,
x.value('(./name/text())[1]', 'nvarchar(50)') AS RegName
FROM
@x.nodes('/propiedades[1]/registro') AS N(x);
GO


AMB



"op.th" wrote:

Buenos días grupo, tengo un problemilla, más bien una duda, necesito
importar en sqlserver express un fichero xml como el descrito abajo. Más
bien lo que necesito es hacer una select para luego hacer un insert o un
update de los datos. Cual es la forma más correcta? Como haría una
select de un fichero xml de este tipo? Desde .net todo perfecto, pero
desde sqlserver no tengo ni idea y debe ser desde consola :(. Alguién me
puede ayudar?

<propiedades>
<registro>
<no_>1000001</no_>
<name>LOPEZ ALVAREZ</name>
</registro>
<registro>
<no_>1000002</no_>
<name>LOPEZ LOPEZ</name>
</registro>
</propiedades>

Muchas gracias anticipadas.

Un saludo
.

Respuesta Responder a este mensaje
#4 op.th
19/11/2009 - 15:44 | Informe spam
Sois unos genios!!! simple y conciso.

Muchas gracias a los dos.

Alejandro Mesa escribió:
Expandiendo un poquito lo dicho por Carlos, puedes usar la funcion OPENROWSET
para importar el archivo hacia una variable XML, y luego podras hacer uso de
lo metodos asociados con este tipo.

Supongamos que el archivo esta en la ruta "c:\temp" y que su nombre es
"test.txt", entonces podemos usar algo asi como:

USE tempdb;
GO
DECLARE @x xml;

SET @x = (
SELECT *
FROM OPENROWSET(BULK N'C:\Temp\test.txt', SINGLE_BLOB) AS [Document]
);

SELECT @x;

SELECT
x.value('(./no_/text())[1]', 'int') AS RegNo,
x.value('(./name/text())[1]', 'nvarchar(50)') AS RegName
FROM
@x.nodes('/propiedades[1]/registro') AS N(x);
GO


AMB



"op.th" wrote:

Buenos días grupo, tengo un problemilla, más bien una duda, necesito
importar en sqlserver express un fichero xml como el descrito abajo. Más
bien lo que necesito es hacer una select para luego hacer un insert o un
update de los datos. Cual es la forma más correcta? Como haría una
select de un fichero xml de este tipo? Desde .net todo perfecto, pero
desde sqlserver no tengo ni idea y debe ser desde consola :(. Alguién me
puede ayudar?

<propiedades>
<registro>
<no_>1000001</no_>
<name>LOPEZ ALVAREZ</name>
</registro>
<registro>
<no_>1000002</no_>
<name>LOPEZ LOPEZ</name>
</registro>
</propiedades>

Muchas gracias anticipadas.

Un saludo
.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida