25/01/2010, 17:07
|
| | Fecha de Ingreso: diciembre-2002 Ubicación: argentina... de ahí seran veinte cuadras
Mensajes: 382
Antigüedad: 22 años Puntos: 0 | |
Optimizar cursor Hola gente:
Tengo una tabla con columnas que indican clases para cada registro. tengo que obtener para cada registro, cuantas veces se repite cada clase.
armé este cursor que me resuelve el problema, pero tarda muchícimo. Alguna alternativa o forma de optimizarlo?
Código:
declare @id as int
declare @columna1 as varchar(50)
declare @columna2 as varchar(50)
declare @columna3 as varchar(50)
declare @columna4 as varchar(50)
declare @columna5 as varchar(50)
declare @columna6 as varchar(50)
declare @columna7 as varchar(50)
declare @columna8 as varchar(50)
declare @columna9 as varchar(50)
declare @columna10 as varchar(50)
delete from procesado
declare cur cursor for
select id, class0, class1, class2, class3, class4, class5, class6, class7, class8, class9 from total
open cur
-- Avanzamos un registro y cargamos en las variables los valores encontrados en el primer registro
fetch next from cur
into @id, @columna1, @columna2, @columna3, @columna4, @columna5, @columna6,@columna7, @columna8, @columna9, @columna10
while @@fetch_status = 0
begin
BEGIN TRY
INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna1,1)
END TRY
BEGIN CATCH
UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna1
END CATCH
begin try
INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna2,1)
END TRY
BEGIN CATCH
UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna2
END CATCH
begin try
INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna3,1)
END TRY
BEGIN CATCH
UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna3
END CATCH
begin try
INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna4,1)
END TRY
BEGIN CATCH
UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna4
END CATCH
begin try
INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna5,1)
END TRY
BEGIN CATCH
UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna5
END CATCH
begin try
INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna6,1)
END TRY
BEGIN CATCH
UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna6
END CATCH
begin try
INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna7,1)
END TRY
BEGIN CATCH
UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna7
END CATCH
begin try
INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna8,1)
END TRY
BEGIN CATCH
UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna8
END CATCH
begin try
INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna9,1)
END TRY
BEGIN CATCH
UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna9
END CATCH
begin try
INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna10,1)
END TRY
BEGIN CATCH
UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna10
END CATCH
-- Avanzamos otro registro
fetch next from cur
into @id, @columna1, @columna2, @columna3, @columna4, @columna5, @columna6,@columna7, @columna8, @columna9, @columna10
end
-- cerramos el cursor
close cur
deallocate cur
Muchas gracias desde ya
__________________ Juan Pablo |