ayuda sobre cursores
Publicado por hermes ophiel (3 intervenciones) el 11/12/2009 21:32:06
saludos
tengo los siguientes cursores los cuales si cumplen qon lo que yo quiero solo que se tardan demasiado me han dicho que con tablas temporales se pueden agilizar solo que no sabria como hacerlo no se si alguno de ustedes me puede ayudar a traducir el codigo a tablas temporales por favor les agradeceria mucho que me ayudaran ya que si es un poco urgente y ya le he dado muchas vueltas al asunto y no encuentro solucion.
ALTER PROCEDURE dbo.sp_rpg_concatenargestion
/*
(
@parameter1 int = 5,
@parameter2 datatype OUTPUT
)
*/
@fechainicial datetime,
@fechafinal datetime,
@producto varchar(100)
AS
create table #tmpTabla(center nvarchar(3000), cuenta nvarchar(50),gestiones nvarchar(3000), fecha nvarchar(3000), producto nvarchar(50))
declare @producto2 VARCHAR(50)
DECLARE @CUENTA char(20)
declare @fecha VARCHAR(3000)
declare @usuario VARCHAR(50)
declare @gestion VARCHAR(255)
declare @textofinal varchar(3000)
declare @textofinalusuario varchar(3000)
declare @textofinalfecha varchar(3000)
SET CONCAT_NULL_YIELDS_NULL OFF
DECLARE cursorcito CURSOR Fast_Forward FOR
select distinct gestion.cuenta from gestion(nolock) where (gestion.producto = @producto OR gestion.producto = @producto + ' ENTRADA' or gestion.producto = @producto + ' MANUAL') and gestion.fecha >= @fechainicial and gestion.fecha<= @fechafinal
for read only
OPEN cursorcito
FETCH NEXT FROM cursorcito INTO @CUENTA
WHILE @@FETCH_STATUS = 0
begin
-- DECLARE cursorcito2 CURSOR FORWARD_ONLY FOR
DECLARE cursorcito2 CURSOR Fast_Forward FOR
SELECT ltrim(rtrim(gestion.cve_user)),ltrim(rtrim(cast(convert(varchar(12), gestion.fecha, 103) as datetime))), ltrim(rtrim(cast(gestion.gestion as varchar(255)))),@producto FROM gestion(nolock) WHERE gestion.Cuenta = @CUENTA and (gestion.producto = @producto OR gestion.producto = @producto + ' ENTRADA' or gestion.producto = @producto + ' MANUAL') and gestion.fecha >= @fechainicial and gestion.fecha<= @fechafinal order by gestion.fecha desc
for read only
OPEN cursorcito2
FETCH NEXT FROM cursorcito2 INTO @usuario,@fecha, @gestion,@producto2
WHILE @@FETCH_STATUS = 0
BEGIN
--SET @TEXTOFINAL = @TEXTOFINAL + @fecha + @gestion
SET @TEXTOFINAL = @TEXTOFINAL + @gestion + '| '
SET @textofinalusuario = @textofinalusuario + @usuario + '| '
SET @textofinalfecha = @textofinalfecha + @fecha + '| '
FETCH NEXT FROM cursorcito2 INTO @usuario,@fecha, @gestion,@producto2
-- INSERT INTO #TMPtABLA VALUES (@TEXTOFINAL, @cuenta)
END
CLOSE cursorcito2
DEALLOCATE cursorcito2
FETCH NEXT FROM cursorcito INTO @CUENTA
INSERT INTO #TMPtABLA VALUES (@textofinalusuario,@cuenta,@TEXTOFINAL,@textofinalfecha, @producto2)
set @TEXTOFINAL = ''
set @textofinalusuario = ''
set @textofinalfecha = ''
END
CLOSE cursorcito
DEALLOCATE cursorcito
SELECT * FROM #TMPTABLA
/* SET NOCOUNT ON */
RETURN
tengo los siguientes cursores los cuales si cumplen qon lo que yo quiero solo que se tardan demasiado me han dicho que con tablas temporales se pueden agilizar solo que no sabria como hacerlo no se si alguno de ustedes me puede ayudar a traducir el codigo a tablas temporales por favor les agradeceria mucho que me ayudaran ya que si es un poco urgente y ya le he dado muchas vueltas al asunto y no encuentro solucion.
ALTER PROCEDURE dbo.sp_rpg_concatenargestion
/*
(
@parameter1 int = 5,
@parameter2 datatype OUTPUT
)
*/
@fechainicial datetime,
@fechafinal datetime,
@producto varchar(100)
AS
create table #tmpTabla(center nvarchar(3000), cuenta nvarchar(50),gestiones nvarchar(3000), fecha nvarchar(3000), producto nvarchar(50))
declare @producto2 VARCHAR(50)
DECLARE @CUENTA char(20)
declare @fecha VARCHAR(3000)
declare @usuario VARCHAR(50)
declare @gestion VARCHAR(255)
declare @textofinal varchar(3000)
declare @textofinalusuario varchar(3000)
declare @textofinalfecha varchar(3000)
SET CONCAT_NULL_YIELDS_NULL OFF
DECLARE cursorcito CURSOR Fast_Forward FOR
select distinct gestion.cuenta from gestion(nolock) where (gestion.producto = @producto OR gestion.producto = @producto + ' ENTRADA' or gestion.producto = @producto + ' MANUAL') and gestion.fecha >= @fechainicial and gestion.fecha<= @fechafinal
for read only
OPEN cursorcito
FETCH NEXT FROM cursorcito INTO @CUENTA
WHILE @@FETCH_STATUS = 0
begin
-- DECLARE cursorcito2 CURSOR FORWARD_ONLY FOR
DECLARE cursorcito2 CURSOR Fast_Forward FOR
SELECT ltrim(rtrim(gestion.cve_user)),ltrim(rtrim(cast(convert(varchar(12), gestion.fecha, 103) as datetime))), ltrim(rtrim(cast(gestion.gestion as varchar(255)))),@producto FROM gestion(nolock) WHERE gestion.Cuenta = @CUENTA and (gestion.producto = @producto OR gestion.producto = @producto + ' ENTRADA' or gestion.producto = @producto + ' MANUAL') and gestion.fecha >= @fechainicial and gestion.fecha<= @fechafinal order by gestion.fecha desc
for read only
OPEN cursorcito2
FETCH NEXT FROM cursorcito2 INTO @usuario,@fecha, @gestion,@producto2
WHILE @@FETCH_STATUS = 0
BEGIN
--SET @TEXTOFINAL = @TEXTOFINAL + @fecha + @gestion
SET @TEXTOFINAL = @TEXTOFINAL + @gestion + '| '
SET @textofinalusuario = @textofinalusuario + @usuario + '| '
SET @textofinalfecha = @textofinalfecha + @fecha + '| '
FETCH NEXT FROM cursorcito2 INTO @usuario,@fecha, @gestion,@producto2
-- INSERT INTO #TMPtABLA VALUES (@TEXTOFINAL, @cuenta)
END
CLOSE cursorcito2
DEALLOCATE cursorcito2
FETCH NEXT FROM cursorcito INTO @CUENTA
INSERT INTO #TMPtABLA VALUES (@textofinalusuario,@cuenta,@TEXTOFINAL,@textofinalfecha, @producto2)
set @TEXTOFINAL = ''
set @textofinalusuario = ''
set @textofinalfecha = ''
END
CLOSE cursorcito
DEALLOCATE cursorcito
SELECT * FROM #TMPTABLA
/* SET NOCOUNT ON */
RETURN
Valora esta pregunta


0