Ver Mensaje Individual
  #3 (permalink)  
Antiguo 04/01/2010, 21:35
Avatar de Andres95
Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Busqueda Respuesta: cambiar Cursor lento por SP

Primero, podrias generar una tabla que solo contenga los consecutivos para evitar el ciclo / cursor.

Solo tendrias que crearla una vez y utilizarla cada que requieras de su funcionalidad....

Código:
SET NOCOUNT ON

IF OBJECT_ID('tbl_Consecutive') IS NOT NULL  Drop Table tbl_Consecutive

CREATE TABLE tbl_Consecutive (iId int NOT NULL)

DECLARE @i BIGINT

SET @i = 0

-- Agrega tantos segun el maximo que esperas iterar
WHILE @i < 100000
BEGIN
    INSERT INTO tbl_Consecutive (iId) VALUES(@i)   
    SET @i = @i + 1;
END

ALTER TABLE tbl_Consecutive ADD PRIMARY KEY (iId)

PRINT 'TABLE FINISHED'

Despues con un solo select con joins insertas directamente la info en tu tabla destino...

Código:
INSERT INTO Carga_Boleta_Match(
             boleta
            ,CveArticulo
            ,DescArticulo
            ,Peso
            ,Peso2
            ,Comentario
) 
SELECT       a.boleta
            ,c.CveArticulo
            ,c.DescArticulo
            ,c.Peso
            ,(Peso / CantidadPrendas) AS peso2
            ,'Validar' AS comentario
FROM         MOMBEF_Trabajo a 
INNER JOIN   MOMBDF_1  b 
ON           a.Boleta = b.boleta     AND
             CAST(a.sucursal AS BIGINT) = b.sucursal  
INNER JOIN   MOARCF_1 c
ON           b.cveArticulo=c.CveArticulo
INNER JOIN   tbl_Consecutive d
ON           d.iId < b.CantidadPrendas
Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.