Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/01/2010, 21:28
devilguzz
 
Fecha de Ingreso: marzo-2004
Mensajes: 70
Antigüedad: 20 años
Puntos: 0
Sonrisa Respuesta: cambiar Cursor lento por SP

puedes mejorarlo usando una tabla temporal... quedaria algo asi:

IF OBJECT_ID('Carga_Boleta_Match') IS NOT NULL
Drop Table Carga_Boleta_Match
go
create table Carga_Boleta_Match
( Boleta bigint,
CveArticulo bigint,
desArticulo varchar(30),
Peso real,
Peso2 real,
CantidadPrendas bigint,
Comentario varchar(50))
go

/**********************************/
--Creas una tabla temporal para la sesion donde tiene un contador en el id
CREATE TABLE #tabla
(
id INT IDENTITY(1,1),
CantidadPrendas INT,
boleta varchar(10),
CveArticulo varchar(10),
DescArticulo varchar(10),
Peso varchar(10),
Peso2 real,
Comentario varchar(10)
)

--Insertas tu consulta que hacias en tu CURSOR directamente en la tabla temporal #tabla
INSERT INTO #tabla
select b.CantidadPrendas,a.boleta,c.CveArticulo, c.DescArticulo, c.Peso,0 as peso2,'' as comentario
FROM MOMBEF_Trabajo a, MOMBDF_1 b, MOARCF_1 c
WHERE a.Boleta=b.boleta and cast(a.sucursal as bigint)=b.sucursal and b.cveArticulo=c.CveArticulo

DECLARE @cant INT
--Aqui preguntamos cuantas registros tiene nuestra tabla temporal
select @cant=COUNT(id) FROM #tabla

--Con este WHILE recorremos la tabla temporal
WHILE(@cant>0)
BEGIN
<Aca realizas tus operaciones>
SET @cant=@cant-1
END

--Creo que esto lo debes dejar para el final
UPDATE Carga_Boleta_Match
SET Comentario ='Validar', Peso2=Peso/CantidadPrendas
WHERE CantidadPrendas >1


PD.. si deseas lo puedes poner como transaccion por si algo sale mal...

en mi corta experiencia, hacia este tipo de procedimientos con cursores pero se demoraban una eternidad y me hacian crecer el LOG no sabes cuanto... pero con las tablas temporales y el IDENTITY... se reduce casi a nada... espero que te sirva de ayuda
__________________
GuzZpaWn