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
![de acuerdo](http://static.forosdelweb.com/fdwtheme/images/smilies/dedosarriba.png)
Saludos!