Discussion:
OPENXML y archivos XML
(demasiado antiguo para responder)
devhi0000
2006-11-01 19:33:02 UTC
Permalink
Hola.

Mi inquietud es la siguiente: He usado OPENXML para leer XML que se lo puede
almacenar en una variable. Sin embargo, si el tamaño del XML supera el tipo
VARCHAR, ya no se puede hacerlo. Necesito saber sin con OPENXML puedo usar
como origen de datos un archivo XML que está en el disco duro, o en su lugar,
que otra alternativa tengo para lograr el mismo resultado.

!!! GRACIAS ¡¡¡¡¡
Alejandro Mesa
2006-11-02 15:04:01 UTC
Permalink
devhi0000,

Puedes crear un procedimiento que espero un parametro de entrada de tipo
[text] para recivir el documento XML. Creas una aplicacion cliente que lea
ese archivo y se lo pase al procedimiento.


AMB
Post by devhi0000
Hola.
Mi inquietud es la siguiente: He usado OPENXML para leer XML que se lo puede
almacenar en una variable. Sin embargo, si el tamaño del XML supera el tipo
VARCHAR, ya no se puede hacerlo. Necesito saber sin con OPENXML puedo usar
como origen de datos un archivo XML que está en el disco duro, o en su lugar,
que otra alternativa tengo para lograr el mismo resultado.
!!! GRACIAS ¡¡¡¡¡
devhi0000
2006-11-02 15:46:02 UTC
Permalink
Hola.

Segui su indicación. Ahora el problema es cuando ejecuta el
sp_xml_preparedocument

Ejemplo:

EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument

sp_xml_preparedocument en lugar de leer el contenido del archivo, lo que
hace es asumir que el valor de @xmlDocument es el texto del XML.

La pregunta sería: Cómo hacer para enviarle el contenido del archivo....

O alguna otra idea....

Gracias....
Post by Alejandro Mesa
devhi0000,
Puedes crear un procedimiento que espero un parametro de entrada de tipo
[text] para recivir el documento XML. Creas una aplicacion cliente que lea
ese archivo y se lo pase al procedimiento.
AMB
Post by devhi0000
Hola.
Mi inquietud es la siguiente: He usado OPENXML para leer XML que se lo puede
almacenar en una variable. Sin embargo, si el tamaño del XML supera el tipo
VARCHAR, ya no se puede hacerlo. Necesito saber sin con OPENXML puedo usar
como origen de datos un archivo XML que está en el disco duro, o en su lugar,
que otra alternativa tengo para lograr el mismo resultado.
!!! GRACIAS ¡¡¡¡¡
Maxi
2006-11-02 15:41:27 UTC
Permalink
Si usas SQL2005 te recomiendo que ya utilices el tipo de datos XML (sino
podes hacer lo que ha indicado el bueno de Alejandro)
--
Salu2

-----------------------------------------
Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker
------------------------------------------
Post by devhi0000
Hola.
Mi inquietud es la siguiente: He usado OPENXML para leer XML que se lo puede
almacenar en una variable. Sin embargo, si el tamaño del XML supera el tipo
VARCHAR, ya no se puede hacerlo. Necesito saber sin con OPENXML puedo usar
como origen de datos un archivo XML que está en el disco duro, o en su lugar,
que otra alternativa tengo para lograr el mismo resultado.
!!! GRACIAS ¡¡¡¡¡
devhi0000
2006-11-02 22:56:02 UTC
Permalink
Hola...

Hice una prueba con BULK INSERT y una tabla con una columna XML.
Efectivamente se sube el contenido del archivo XML. Ahora cómo hago para
enviar el contenido de esta columna al EXEC sp_xml_preparedocument @docHandle
OUTPUT, @xmlDocument
O cómo es el proceso para insertar estos datos en la tabla respectiva.?


Gracias....
Post by Maxi
Si usas SQL2005 te recomiendo que ya utilices el tipo de datos XML (sino
podes hacer lo que ha indicado el bueno de Alejandro)
--
Salu2
-----------------------------------------
Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker
------------------------------------------
Post by devhi0000
Hola.
Mi inquietud es la siguiente: He usado OPENXML para leer XML que se lo puede
almacenar en una variable. Sin embargo, si el tamaño del XML supera el tipo
VARCHAR, ya no se puede hacerlo. Necesito saber sin con OPENXML puedo usar
como origen de datos un archivo XML que está en el disco duro, o en su lugar,
que otra alternativa tengo para lograr el mismo resultado.
!!! GRACIAS ¡¡¡¡¡
Maxi
2006-11-03 12:32:52 UTC
Permalink
Hola, no comprendo tu pregunta :( podrias mostrarme un ejemplo ?
--
Salu2

-----------------------------------------
Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker
------------------------------------------
Post by devhi0000
Hola...
Hice una prueba con BULK INSERT y una tabla con una columna XML.
Efectivamente se sube el contenido del archivo XML. Ahora cómo hago para
O cómo es el proceso para insertar estos datos en la tabla respectiva.?
Gracias....
Post by Maxi
Si usas SQL2005 te recomiendo que ya utilices el tipo de datos XML (sino
podes hacer lo que ha indicado el bueno de Alejandro)
--
Salu2
-----------------------------------------
Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker
------------------------------------------
Post by devhi0000
Hola.
Mi inquietud es la siguiente: He usado OPENXML para leer XML que se lo puede
almacenar en una variable. Sin embargo, si el tamaño del XML supera el tipo
VARCHAR, ya no se puede hacerlo. Necesito saber sin con OPENXML puedo usar
como origen de datos un archivo XML que está en el disco duro, o en su lugar,
que otra alternativa tengo para lograr el mismo resultado.
!!! GRACIAS ¡¡¡¡¡
devhi0000
2006-11-07 13:21:01 UTC
Permalink
Claro....

La idea básica es encontrar una forma automatizada de subir masivamente
datos a tablas SQL SRV 2005 Express a partir de archivos XML. El proceso de
subida de datos se lanza desde una aplicación hecha en Visual Foxpro 9.

Se piesa usar un SP como el siguiente para poblar la tabla Rec_Tv de SQL SRV
2005 a partir de un archivo XML. El SP LeerXML es un prototipo, no está
completo, pero contiene los pasos iniciales en los que tengo problemas. A
este SP hay que enviarle como parámetro el contenido del archivo XML.
Inicialmente el contenido del archivo XML se sube en una tabla comodin de
nombre T la cual tiene la columna XMLcol de tipo XML. El proceso se puede
organizar en los siguientes pasos:

0) Extracto del contenido del archivo XML:
<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
<VFPData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="CURREC_TVConEsquemaExterno_CentradoAtributos_VFP.xsd">
<currec_tv dimemp="ML" nro_sol="32" mucipio="LA ROSALINA" nom_sol="PEPITO"
fec_sol="2001-01-02" hor_sol="1:55p" fec_rec="2001-01-03" hor_rec="4:45p"
muestra="1" laborat="6849" semana="1" analisis="TV" cultivo="01"
variedad="01070" />
<currec_tv dimemp="ML" nro_sol="33" mucipio="LA ROSALINA" nom_sol="PEPITO"
fec_sol="2001-01-22" hor_sol="3:19p" fec_rec="2001-01-24" hor_rec="10:8a"
muestra="1" laborat="6922" semana="4" analisis="TV" cultivo="01"
variedad="01005" />
</VFPData>


1) Para poblar la tabla con el contenido del archivo XML:

delete from t
INSERT INTO T(XmlCol)
SELECT * FROM OPENROWSET(
BULK 'E:\Chia\2006\CURREC_TVConEsquemaExterno_CentradoAtributos_VFP.xml',
SINGLE_BLOB) AS x
select * from t

2) Ejecutar el SP LeerXML y pasarle como parámetro la columna T.XMLcol
Esto es lo que no sé cómo hacer
..........................


3) Este es el contenido del SP LeerXML

ALTER PROCEDURE [dbo].[LeerXML]
-- Add the parameters for the stored procedure here
@xmlDocument TEXT

AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON

DECLARE @docHandle int

-- --Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument
-- select @docHandle

-- Definir el tipo de XML
DECLARE @nTipoXML_Atributos int
DECLARE @nTipoXML_Elementos int
DECLARE @nTipoXML_Mixto int
DECLARE @nTipoXML int

set @nTipoXML_Atributos = 1 -- Los datos están como atributos <currectv>
muestra="1" nom_sol="pepito" <currectv>
set @nTipoXML_Elementos = 2 --Los datos están como en forma de elementos
XML <muestra>1</muestra>
set @nTipoXML_Mixto = 3 -- Los datos están como en forma mixta como
atributos y elementos(etiquetas)

set @nTipoXML = @nTipoXML_Atributos -- Definir el tipo de XML a procesar.

-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@docHandle, '/VFPData/currec_tv', @nTipoXML)
WITH Rec_tv

EXEC sp_xml_removedocument @docHandle

END




GRACIAS...
Post by Maxi
Hola, no comprendo tu pregunta :( podrias mostrarme un ejemplo ?
--
Salu2
-----------------------------------------
Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker
------------------------------------------
Post by devhi0000
Hola...
Hice una prueba con BULK INSERT y una tabla con una columna XML.
Efectivamente se sube el contenido del archivo XML. Ahora cómo hago para
O cómo es el proceso para insertar estos datos en la tabla respectiva.?
Gracias....
Post by Maxi
Si usas SQL2005 te recomiendo que ya utilices el tipo de datos XML (sino
podes hacer lo que ha indicado el bueno de Alejandro)
--
Salu2
-----------------------------------------
Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker
------------------------------------------
Post by devhi0000
Hola.
Mi inquietud es la siguiente: He usado OPENXML para leer XML que se lo puede
almacenar en una variable. Sin embargo, si el tamaño del XML supera el tipo
VARCHAR, ya no se puede hacerlo. Necesito saber sin con OPENXML puedo usar
como origen de datos un archivo XML que está en el disco duro, o en su lugar,
que otra alternativa tengo para lograr el mismo resultado.
!!! GRACIAS ¡¡¡¡¡
Loading...