Se podria pasar una tabla y/o cursor como un parametro a uns Store Procedure en SQL Server 2008?

1,660 views
Skip to first unread message

TurbiSoft

unread,
Aug 8, 2011, 4:07:21 PM8/8/11
to Comunidad de Visual Foxpro en Español
Saludos:

Esta es la pregunta: Se podria pasar una tabla y/o cursor como un
parametro a uns Store Procedure en SQL Server 2008?

No se si esto es posible, pero veo que SQL 2008 tiene un tipo de datos
o varible tipo Table.

Gracias por cualquier idea o info, De todas formas, sigo buscando e
informo cualquier avance.

Miguel Antúnez

unread,
Aug 8, 2011, 4:13:27 PM8/8/11
to publice...@googlegroups.com
Las variables tipo table son para uso dentro del mismo sql server, la manera de pasar un cursor es a través de XML.

Saludos.

--
Miguel Angel Antúnez Camones
Especialista en SQL Server

mant...@frenosa.com.pe
mant...@gmail.com
miguel_...@msn.com
Cel. 997914428

Microsoft Active Professional
Membresía FY11-4D8A908D4C470

Mauricio Molinero,

unread,
Aug 8, 2011, 4:17:38 PM8/8/11
to Comunidad de Visual Foxpro en Español

Busca en Google "SQL Server 2008 xml parameters"

Fijate en este ejemplo arma el XML en el SP. Podrias armarlo en VFP y
pasarlo.

http://weblogs.asp.net/jgalloway/archive/2007/02/16/passing-lists-to-sql-server-2005-with-xml-parameters.aspx

Saludos!

Mauricio R. Molinero,

TurbiSoft

unread,
Aug 8, 2011, 4:33:32 PM8/8/11
to Comunidad de Visual Foxpro en Español
Excelente!!, creo que puedo trabajar al rededor de estas ideas,
haciendo un CursorToXML y enviando este como parametro a SQL Server,

Gracias Miguel y Mauricio, les informo los avances.

Luis Alberto Turbi
Rep. Dominicana

Mauricio Molinero,

unread,
Aug 8, 2011, 4:36:18 PM8/8/11
to Comunidad de Visual Foxpro en Español
Guarda con CursorToXml que te va a hacer un espacio 'VFPDataset' y no
se como lo procesara el Server.

Saludos!

Mauricio R. Molinero,

TurbiSoft

unread,
Aug 8, 2011, 4:42:09 PM8/8/11
to Comunidad de Visual Foxpro en Español
Bueno, podira hacerlo un tanto "manual", con un Scan y un Text
to ...EndText additive.

Lo he hecho consumiendo Web Services y concatenando variables tipo
character: cHeander,cBody y cFoot, que contienen el XML completo.

Alfonso Arias Lemas

unread,
Aug 8, 2011, 7:05:27 PM8/8/11
to publice...@googlegroups.com
Hola Daniel, yo resuelvo ese problema creando una tabla temporal #NombreTabla con el comando SQLEXEC, despues inserto los valores en la tabla y sin cerrar la seccion el SP reconoce la tabla temporal que puedes utilizar.
Ojala te sirva.

Saludos,
   Alfonso

De: Ing.Daniel Bojorge <debs....@gmail.com>
Para: publice...@googlegroups.com
Enviado: lunes 8 de agosto de 2011 20:09
Asunto: Re: [vfp] Re: Se podria pasar una tabla y/o cursor como un parametro a uns Store Procedure en SQL Server 2008?

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)

Ing.Daniel Bojorge

unread,
Aug 8, 2011, 7:12:36 PM8/8/11
to publice...@googlegroups.com
Gracias.


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)



Sebastian Mercado

unread,
Aug 9, 2011, 7:35:43 AM8/9/11
to publice...@googlegroups.com
Hago lo mismo que Alfonso, dentro de una transaccion. 

TurbiSoft

unread,
Aug 9, 2011, 9:21:22 AM8/9/11
to Comunidad de Visual Foxpro en Español
Excelentes alternatvias, gracias por compartirlas.

Ing.Daniel Bojorge

unread,
Aug 8, 2011, 5:09:54 PM8/8/11
to publice...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages