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 MaxiHola, no comprendo tu pregunta :( podrias mostrarme un ejemplo ?
--
Salu2
-----------------------------------------
Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker
------------------------------------------
Post by devhi0000Hola...
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 MaxiSi 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 devhi0000Hola.
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 ¡¡¡¡¡