usar valores de un cursor dentro de otro

16/04/2004 - 15:36 por Sergio Forever | Informe spam
Hola!!
Mi idea es conseguir a partir de un cursor los valores para poder abrir
otros cursores que necesitan esas variables. Mi idea es la siguiente pero
esta mal:
use GIP
go
if exists(select name,type from sysobjects where name='cargarTabla'and
type='p')
drop procedure cargarTabla
go
create procedure cargarTabla
as
declare @sArea varchar
declare @dAño datetime
declare @sConcepto varchar
declare @sDetalle varchar
declare @sProyecto varchar
declare @sCentro varchar
declare @sGI varchar
declare @iUnidades int
declare @iPrecio int
declare @iArea int
declare @iConcepto varchar
declare @iDetalle varchar
declare @iProyecto varchar
declare @iCentro varchar
declare cDatos cursor for select
año,areagi,conceptogi,detallegi,proyecto,gi,centrocoste,unidades,precio from
datos
declare cArea cursor for select codigoareagi from areagi where
descripcionareagi=@sArea
declare cConcepto cursor for select codigoconceptogi from conceptogi where
descripcionconceptogi=@sConcepto
declare cDetalle cursor for select codigodetallegi from detallegi where
descripciondetallegi=@sDetalle
declare cProyecto cursor for select codigoproyecto from proyectos where
descripcionproyecto=@sProyecto
declare cCentro cursor for select codigocentrocoste from [Centros de Coste]
where descripcioncentrocoste=@sCentro

open cDatos
fetch next from cDatos into
@dAño,@sArea,@sConcepto,@sDetalle,@sProyecto,@sGI,@sCentro,@iUnidades,@iPrec
io
SET @dAño=@dAño
SET @sArea=@sArea
SET @sConcepto=@sConcepto
SET @sDetalle=@sDetalle
SET @sProyecto=@sProyecto
SET @sGI=@sGI
SET @sCentro=@sCentro
SET @iUnidades=@iUnidades
SET @iPrecio=@iPrecio
/*print(@dAño)*/
while @@FETCH_STATUS=0

BEGIN

print(@dAño)
open cArea
fetch next from cArea into @iArea
SET @iArea=@iArea
close cArea
deallocate cArea

open cConcepto
fetch next from cConcepto into @iConcepto
SET @iConcepto=@iConcepto
close cConcepto
deallocate cConcepto

open cDetalle
fetch next from cDetalle into @iDetalle
SET @iDetalle=@iDetalle
close cDetalle
deallocate cDetalle

/*open cProyecto
fetch next from cProyecto into @iProyecto
close cProyecto
deallocate cProyecto

open cCentro
fetch next from cCentro into @iCentro
close cCentro
deallocate cCentro*/
/*quedamos que eran genéricos*/

if (@sGI='Gasto')
insert into presupuestos
values(@dAño,@iArea,@iConcepto,@iDetalle,9999,9999,1,@iUnidades,@iPrecio)
else
insert into presupuestos
values(@dAño,@iArea,@iConcepto,@iDetalle,9999,9999,0,@iUnidades,@iPrecio)

fetch next from cDatos into
@dAño,@sArea,@sConcepto,@sDetalle,@sProyecto,@sGI,@sCentro,@iUnidades,@iPrec
io
END
print(@iArea)

close cDatos
deallocate cDatos


Quiero saber si se puede y como solucionar el problema

Gracias.Salu2.
 

Leer las respuestas

#1 ulises
16/04/2004 - 18:33 | Informe spam
No creo que necesites cursores para ello, veo que lo único
que haces es obtener los códigos en base a una descripción
de los campos de varias tablas para agregar en tu tabla lo
cual puedes hacer perfectamente con JOINs, algo como :

INSERT INTO presupuestos
SELECT año,
codigoareagi,
codigodetallegi,
codigoproyecto,
9999,
9999,
( CASE gi WHEN 'Gasto' THEN 1 ELSE o END ),
unidades,
precio
FROM datos left join areagi
on ( areagi = descripcionconceptogi )
left join detallegi
on ( detallegi = descripciondetallegi )
left join proyectos
on ( proyecto = descripcionproyecto )

Si tienes descripciones repetidas, podrias usar en lugar
de las tablas directas hacer un distinct previo, en todo
caso he asumido muchas cosas pero creo que te da una idea
para que lo apliques a tus requerimientos.

Saludos,
Ulises

Hola!!
Mi idea es conseguir a partir de un cursor los valores


para poder abrir
otros cursores que necesitan esas variables. Mi idea es


la siguiente pero
esta mal:
use GIP
go
if exists(select name,type from sysobjects where


name='cargarTabla'and
type='p')
drop procedure cargarTabla
go
create procedure cargarTabla
as
declare @sArea varchar
declare @dAño datetime
declare @sConcepto varchar
declare @sDetalle varchar
declare @sProyecto varchar
declare @sCentro varchar
declare @sGI varchar
declare @iUnidades int
declare @iPrecio int
declare @iArea int
declare @iConcepto varchar
declare @iDetalle varchar
declare @iProyecto varchar
declare @iCentro varchar
declare cDatos cursor for select
año,areagi,conceptogi,detallegi,proyecto,gi,centrocoste,un


idades,precio from
datos
declare cArea cursor for select codigoareagi from areagi


where
descripcionareagi=@sArea
declare cConcepto cursor for select codigoconceptogi from


conceptogi where
descripcionconceptogi=@sConcepto
declare cDetalle cursor for select codigodetallegi from


detallegi where
descripciondetallegi=@sDetalle
declare cProyecto cursor for select codigoproyecto from


proyectos where
descripcionproyecto=@sProyecto
declare cCentro cursor for select codigocentrocoste from


[Centros de Coste]
where descripcioncentrocoste=@sCentro

open cDatos
fetch next from cDatos into
@dAño,@sArea,@sConcepto,@sDetalle,@sProyecto,@sGI,@sCentro


,@iUnidades,@iPrec
io
SET @dAño=@dAño
SET @sArea=@sArea
SET @sConcepto=@sConcepto
SET @sDetalle=@sDetalle
SET @sProyecto=@sProyecto
SET @sGI=@sGI
SET @sCentro=@sCentro
SET @iUnidades=@iUnidades
SET @iPrecio=@iPrecio
/*print(@dAño)*/
while @@FETCH_STATUS=0

BEGIN

print(@dAño)
open cArea
fetch next from cArea into @iArea
SET @iArea=@iArea
close cArea
deallocate cArea

open cConcepto
fetch next from cConcepto into @iConcepto
SET @iConcepto=@iConcepto
close cConcepto
deallocate cConcepto

open cDetalle
fetch next from cDetalle into @iDetalle
SET @iDetalle=@iDetalle
close cDetalle
deallocate cDetalle

/*open cProyecto
fetch next from cProyecto into @iProyecto
close cProyecto
deallocate cProyecto

open cCentro
fetch next from cCentro into @iCentro
close cCentro
deallocate cCentro*/
/*quedamos que eran genéricos*/

if (@sGI='Gasto')
insert into presupuestos
values


(@dAño,@iArea,@iConcepto,@iDetalle,9999,9999,1,@iUnidades,@
iPrecio)
else
insert into presupuestos
values


(@dAño,@iArea,@iConcepto,@iDetalle,9999,9999,0,@iUnidades,@
iPrecio)

fetch next from cDatos into
@dAño,@sArea,@sConcepto,@sDetalle,@sProyecto,@sGI,@sCentro


,@iUnidades,@iPrec
io
END
print(@iArea)

close cDatos
deallocate cDatos


Quiero saber si se puede y como solucionar el problema

Gracias.Salu2.


.

Preguntas similares