Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Leer fichero xml

8 views
Skip to first unread message

op.th

unread,
Nov 19, 2009, 6:46:12 AM11/19/09
to
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

Carlos Sacristan

unread,
Nov 19, 2009, 7:06:24 AM11/19/09
to
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:ugyTH4Qa...@TK2MSFTNGP04.phx.gbl...

op.th

unread,
Nov 19, 2009, 8:08:51 AM11/19/09
to
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�:

Alejandro Mesa

unread,
Nov 19, 2009, 8:43:02 AM11/19/09
to
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

> .
>

op.th

unread,
Nov 19, 2009, 9:44:59 AM11/19/09
to
Sois unos genios!!! simple y conciso.

Muchas gracias a los dos.

Alejandro Mesa escribió:

vecasita vecasita

unread,
Jul 21, 2011, 11:06:52 AM7/21/11
to
y SQL SERVER 2000 como puedo ahcerlo si no funciona FROM OPENROWSET(BULK
?

> On Thursday, November 19, 2009 6:46 AM 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


>> On Thursday, November 19, 2009 7:06 AM Carlos Sacristan wrote:

>> 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


>>> On Thursday, November 19, 2009 8:08 AM op.th wrote:

>>> 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?:


>>>> On Thursday, November 19, 2009 8:43 AM Alejandro Mesa wrote:

>>>> 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:


>>>>> On Thursday, November 19, 2009 9:44 AM op.th wrote:

>>>>> Sois unos genios!!! simple y conciso.
>>>>>
>>>>> Muchas gracias a los dos.
>>>>>

>>>>> Alejandro Mesa escribi??:

0 new messages