problemas al pasar un archivo XML a las tablas

12/05/2004 - 03:29 por Mr yo | Informe spam
hola tengo el siguiente problema necesito llenar unas tablas a partir de un
archivo XML la cuestión es que al seleccionar el path (/oc/detalle) en el
archivo suma 2 columnas cuando pido el /oc/cabecera por ejemplo el archivo
que quiero agregar es el siguiente

<oc>
<cabecera>
<version>1</version>
<numero_oc>4500200000</numero_oc>
</cabecera>
<detalle>
<codigo_linea>00010</codigo_linea>

<codigo_item_comprador>000000000000030903</codigo_item_comprador>
</detalle>
</oc>

para pasar este archivo me sirvo de un store procedure que es el siguiente

CREATE PROCEDURE sp_Insert_OC_DET
@strXML ntext
AS
DECLARE @iDoc int
EXECUTE sp_xml_preparedocument @iDoc OUTPUT, @strXML
INSERT INTO DET_ORD_COMPRA (
version,
numero_oc,
codigo_linea,
codigo_item_comprador,
(SELECT * FROM OpenXML(@iDoc, '/oc/detalle',3)
WITH
(
version char(2) '../cabecera' < se
supone que con esto basta pero al parecer no
,numero_oc char(10) '../cabecera'
,codigo_linea char (10)
,codigo_item_comprador char (10)
))


EXECUTE sp_xml_removedocument @iDoc
GO

esto da como resultado que el campo versión queda lleno con el "1" y en el
campo numero_oc queda "1 4500200000" ósea suma los dos campos, la verdad es
que ya no se que puede ser, ¿alguien ha visto este tipo de problema? ¿podra
ser que hay problemas al extraer datos que estan al mismo nivel en el
registro?
 

Leer las respuestas

#1 Carlos Sacristan
12/05/2004 - 11:26 | Informe spam
Prueba indicando explícitamente el elemento que quieres recoger. Es
decir, tu procedimiento almacenado debería quedar de la siguiente manera:

CREATE PROCEDURE sp_Insert_OC_DET
@strXML ntext
AS
DECLARE @iDoc int
EXECUTE sp_xml_preparedocument @iDoc OUTPUT, @strXML
INSERT INTO DET_ORD_COMPRA (
version,
numero_oc,
codigo_linea,
codigo_item_comprador,
(SELECT * FROM OpenXML(@iDoc, '/oc/detalle',3)
WITH
(
version char(2) '../cabecera/version'
,numero_oc char(10) '../cabecera/numero_oc'
,codigo_linea char (10) 'codigo_linea'
,codigo_item_comprador char (10) 'codigo_item_comprador'
))




Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"Mr yo" escribió en el mensaje
news:
hola tengo el siguiente problema necesito llenar unas tablas a partir de


un
archivo XML la cuestión es que al seleccionar el path (/oc/detalle) en el
archivo suma 2 columnas cuando pido el /oc/cabecera por ejemplo el archivo
que quiero agregar es el siguiente

<oc>
<cabecera>
<version>1</version>
<numero_oc>4500200000</numero_oc>
</cabecera>
<detalle>
<codigo_linea>00010</codigo_linea>

<codigo_item_comprador>000000000000030903</codigo_item_comprador>
</detalle>
</oc>

para pasar este archivo me sirvo de un store procedure que es el siguiente

CREATE PROCEDURE sp_Insert_OC_DET
@strXML ntext
AS
DECLARE @iDoc int
EXECUTE sp_xml_preparedocument @iDoc OUTPUT, @strXML
INSERT INTO DET_ORD_COMPRA (
version,
numero_oc,
codigo_linea,
codigo_item_comprador,
(SELECT * FROM OpenXML(@iDoc, '/oc/detalle',3)
WITH
(
version char(2) '../cabecera' < se
supone que con esto basta pero al parecer no
,numero_oc char(10) '../cabecera'
,codigo_linea char (10)
,codigo_item_comprador char (10)
))


EXECUTE sp_xml_removedocument @iDoc
GO

esto da como resultado que el campo versión queda lleno con el "1" y en el
campo numero_oc queda "1 4500200000" ósea suma los dos campos, la verdad


es
que ya no se que puede ser, ¿alguien ha visto este tipo de problema?


¿podra
ser que hay problemas al extraer datos que estan al mismo nivel en el
registro?


Preguntas similares