SQL Server - 2 CURSORES EN UN PROCEDURE

 
Vista:

2 CURSORES EN UN PROCEDURE

Publicado por Elpidio MOrales (6 intervenciones) el 01/02/2007 17:50:33
Amigos, que tl, tal vez a algunos de ustedes les vaya a causar gracia lo que pregunte, pero la verdad no e podido resolver este Problema, Ojala alguno de ustedes pueda auxiliarme a resolver este problema.

Estoy usando 2 cursores en un Mismo Procedure,

en el Primero no tengo problema:

.- Lo declaro
.- paso los valores del cursor a mi Tabla Temporal.
.- Elimino el Cursor y listo

En el 2do.
.- Lo declaro
.- cuado quiero pasar los datos a la tabla temporal es donde me marca error en el Fetch_Status, a lo cual no se si esta variable se quede con el valor del 1er Cursor. tal vez necesite reinicarlo ó algo asi.., aDJUNTO EL CODIGO PARA VER SI ALGUIEN PUEDE AYUDARME...

Muchisimas gracias..

EXEC xpConfigSQL
GO

if exists (select * from sysobjects where id = object_id('dbo.spIdelecFlujo') and type = 'P') drop procedure dbo.spIdelecFlujo
GO
Create Procedure spIdelecFlujo
--Estos parametros los deve de mandar el Reporte

--@Mov char(20),
--@MovID varchar(20)
AS
BEGIN
DECLARE
--Estas son las variables que utilzare dentro del Reporte
@CantidadTemp Float,

@CtaDinero char(10),
@CtaDescripcion varchar(100),
@CtaDineroTipo char(10),
@CtaMoneda Char(10),
@CtaSaldo Decimal,
@CtaTipoCambio Float,
@CxcMovId varChar (20),
@CxCFechaEmision Datetime,
@CxcVencimiento DateTime,
@CxCMoneda Char(10),
@CxCTipoCambio Float,
@CxCCliente Char(100),
@CxCImporte Money,
@CxCAgente Char(10),
@CxCSaldo Money,
@CxCNombre VarChar (100)

CREATE TABLE #FlujoTemp(
CtaDinero char (10),
CtaDescripcion VarChar(100) Null,
CtaDineroTipo Char (10),
CtaMoneda Char(10) Null,
CtaSaldo decimal,
CtaTipoCambio Float,
CxcMovId varChar (20),
CxCFechaEmision Datetime,
CxcVencimiento DateTime,
CxCMoneda Char(10),
CxCTipoCambio Float,
CxCCliente Char(100),
CxCImporte Money,
CxCAgente Char(10),
CxCSaldo Money,
CxCNombre VarChar (100)
)
DECLARE cur_GenerarFlujo CURSOR FOR
Select
CtaDinero.CtaDinero,CtaDinero.Descripcion,CtaDinero.Tipo,
CtaDinero.Moneda,CtaDineroConSaldo.Saldo,Mon.TipoCambio
from
CtaDinero,CtaDineroConSaldo,Mon
Where
Left(CtaDinero.CtaDinero,5)<>'Comis'
And CtaDinero.moneda=Mon.Moneda
And CtaDinero.CtaDinero=CtaDineroConSaldo.CtaDinero
OPEN cur_GenerarFlujo
FETCH NEXT FROM cur_GenerarFlujo INTO @CtaDinero,@CtaDescripcion,@CtaDineroTipo,@CtaMoneda,
@CtaSaldo,@CtaTipoCambio
Set @CantidadTemp=0
While @@Fetch_Status<>-1
Begin
INSERT INTO #FlujoTemp VALUES(@CtaDinero,@CtaDescripcion,@CtaDineroTipo,@CtaMoneda,@CtaSaldo,@CtaTipoCambio)
FETCH NEXT FROM cur_GenerarFlujo INTO @CtaDinero,@CtaDescripcion,@CtaDineroTipo,@CtaMoneda,
@CtaSaldo,@CtaTipoCambio
Set @CantidadTemp=@CantidadTemp+1
End
CLOSE cur_GenerarFlujo
DEALLOCATE cur_GenerarFlujo

-- Aqui Comienzo los datos de CxC
-- y vulvo a abrir el mismo Cursor

--SE PODRA HACER ESTOOOOOO
DECLARE cur_GenerarFlujoA CURSOR FOR
Select
CxC.MovId,CxC.FechaEmision,CxC.Vencimiento,CxC.Moneda,CxC.TipoCambio,CxC.Cliente,
CxC.Importe,CxC.Agente,CxC.Saldo,Cte.Nombre
From CxC,Cte
Where CxC.Mov='Factura' And. CxC.Estatus='Pendiente' And Cte.Cte=Cxc.Cliente
OPEN cur_GenerarFlujoA
FETCH NEXT FROM cur_GenerarFlujoA INTO @CxCMovId,@CxCFechaEmision,@CxCVencimiento,@CxCMoneda,@CxCTipoCambio,
@CxCCliente,@CxCImporte,@CxCAgente,@cxCSaldo,@CxCNombre
Set @CantidadTemp=0
While @@Fetch_Status<>-1 --AQUI ES DONDE ME MARCA EL ERRO---
Begin
INSERT INTO #FlujoTemp VALUES(@CxCMovId,@CxCFechaEmision,@CxCVencimiento,@CxCMoneda,@CxCTipoCambio,
@CxCCliente,@CxCImporte,@CxCAgente,@cxCSaldo,@CxCNombre

FETCH NEXT FROM cur_GenerarFlujoA INTO @CxCMovId,@CxCFechaEmision,@CxCVencimiento,@CxCMoneda,@CxCTipoCambio,
@CxCCliente,@CxCImporte,@CxCAgente,@cxCSaldo,@CxCNombre
Set @CantidadTemp=@CantidadTemp+1
End
CLOSE cur_GenerarFlujoA
DEALLOCATE cur_GenerarFlujoA
SELECT * FROM #FlujoTemp
End
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:2 CURSORES EN UN PROCEDURE

Publicado por Isaías (3308 intervenciones) el 01/02/2007 21:35:33
CERO CURSORES, el primero se resuelve asi:

NOTA: No entiendo para que sirve la variable =@CantidadTemp

Select
CtaDinero.CtaDinero,CtaDinero.Descripcion,CtaDinero.Tipo,
CtaDinero.Moneda,CtaDineroConSaldo.Saldo,Mon.TipoCambio
INTO #FlujoTemp
from
CtaDinero,CtaDineroConSaldo,Mon
Where
Left(CtaDinero.CtaDinero,5)<>'Comis'
And CtaDinero.moneda=Mon.Moneda
And CtaDinero.CtaDinero=CtaDineroConSaldo.CtaDinero

El segundo cursor, se substituye por:

INSERT INTO #FlujoTemp
Select
CxC.MovId,CxC.FechaEmision,CxC.Vencimiento,CxC.Moneda,CxC.TipoCambio,CxC.Cliente,
CxC.Importe,CxC.Agente,CxC.Saldo,Cte.Nombre
From CxC,Cte
Where CxC.Mov='Factura' And. CxC.Estatus='Pendiente' And Cte.Cte=Cxc.Cliente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:2 CURSORES EN UN PROCEDURE

Publicado por Elpidio Morales V (6 intervenciones) el 01/02/2007 21:56:50
La verdad Amigo, no se nada de SQL, esto lo estoy cpopiando de un Procedimiento que me tope, mas ó menos le entiendo pero no sabia que podia hacer la Consulta y depositar la Información directamente en la Tabla..

Te agradezco mucho la información y si supieras de algún Manual qe pudiera ayudarme a aprender la Programación de SQL te agradeceria enormemente...

SAludos y gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:2 CURSORES EN UN PROCEDURE

Publicado por Isaías (3308 intervenciones) el 02/02/2007 19:14:24
Bueno, te mando la liga donde podras bajar el MANUAL COMPLETO de SQL SERVER en español, espero te sirva.

-- Manual completo On-Line
http://www.microsoft.com/downloads/details.aspx?displaylang=es&FamilyID=a6f79cb1-a420-445f-8a4b-bd77a7da194b

Y bueno, sigue enviando tus dudas, tratare de ayudarte.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar