Yo uso XML, para esto utilizo una funcion que creé que es así.
*************************************************
*********************************GetXML x Daniel Bojorge
*************************************************
Function GetXML
Parameters pCursor
Local vlXML
If !Used(pCursor)
oSistema.Mensaje("Tabla " + pCursor + " No está abierta" + LINEANUEVA + "No puedo generar XML",0,16)
Return ""
Endif
** Preparar Archivo XML para Enviarlo
Try
Cursortoxml(pCursor,"vlXML",2,2)
vlXML = Strconv(vlXML,9)
vlXML = Substr(vlXML,67)
vlXML = Strtran(vlXML,"false","0")
*vlXML = Strtran(vlXML,"'"," ")
vlXML = Strtran(vlXML,"true","1")
vlXML = Strtran(vlXML," / / : : AM","''")
Catch To oError
oSistema.MsgError("Error Generando XML")
vlXML = ""
Endtry
Return vlXML
Endfunc
La idea es "formatear" el dato, esto lo utilizo de la siguiente manera. Una vez creado el cursor, (ejemplo cursorEjemplo), lo paso (el nombre) como parámetro de la función GetXML y ésta función me devuelve a una variable, todos los datos en formato XML.
vXML = GetXML("cursorEjemplo")
Luego, mando a llamar un SP y le paso como parámetro el valor del vXML.
Ahora en SQL Server, hago lo siguiente, el parámetro que recibe el xml, es de tipo TEXT.
@xmlDetalle text = NULL y lo inicializo con NULL, para validar que llegue algo.
el proceso es el siguiente.
DECLARE @iTree INTEGER /*Declaro una variable entera*/
EXEC sp_xml_preparedocument @iTree OUTPUT, @xmlDetalle /**preparo el xml y el id estará en la variable iTree/
En mi caso, lo que hago es ingresar registros, por lo que hago algo parecido a esto:
INSERT CmpOCDet (cEmpresa,cNoOC,lNuevo,cCodigo,cDescrip,cReferencia,cCodBar,cCodMarca,
cGrupo,csGrupo,cUM,nCantDec,nCantidad,nCantRec,nPrecioPrv,nDescuento,nDai,nISC,
nIva,nPrecUnitario,nTotal,cRecibidoPor,fRecibidoPor,lActRec,fCreado,cUserCrea,
fModif,cUserModif,nId)
SELECT * FROM
OPENXML(@iTree, 'VFPData/curocdettmp',1)
WITH (
cempresa varchar(3),cnooc varchar(20),lnuevo bit ,ccodigo varchar(20),cdescrip varchar(150),
creferencia varchar(50),ccodbar varchar(50),ccodmarca varchar(10),
cgrupo varchar(10),csgrupo varchar(10),cum varchar(10),ncantdec Int,ncantidad Numeric(14,4),
ncantrec Numeric(14,4),nprecioprv Numeric(14,2),ndescuento Numeric(14,2),ndai Numeric(14,2),
nisc Numeric(14,2),niva Numeric(14,2),nprecunitario Numeric(14,2),ntotal Numeric(14,2),
crecibidopor varchar(15),frecibidopor DateTime,lactrec Bit,
fcreado DateTime,cusercrea varchar(15),fmodif DateTime,cusermodif varchar(15),nid int )
Lo que va en negrita, es el nombre del nodo del XML.
Dios L@s Bendiga
Saludos,
Daniel (Con 1 Estrella DCE de Microsoft)
www.debsconsultores.com
Nicaragua
"Si ustedes permanecen unidos a mí, y si permanecen fieles a mis enseñanzas, pidan lo que quieran y se les dará.
(Juan 15:7 DHH)
Bendito el varón que se fía en el SEÑOR, y cuya confianza es el SEÑOR.
(Jeremías 17:7 RV2000)