Tengo que resolver un problema de anidamiento de cursores
ya que no he encontrado una sentencia que me permita
enfocar al cursor correctamente. El ejemplo sería:
DECLARE Depositos CURSOR
KEYSET
FOR SELECT FDEPOSITO FROM ARTMOVTABLA WHERE
FARTSELECCION = 'PESCA' GROUP BY FDEPOSITO ORDER BY
FDEPOSITO
DECLARE Productos CURSOR
KEYSET
FOR SELECT FARTICULO FROM ARTMOVTABLA WHERE
FARTSELECCION = 'PESCA' GROUP BY FARTICULO ORDER BY
FARTICULO
OPEN Productos
IF @@CURSOR_ROWS > 0
BEGIN
FETCH NEXT FROM Productos
INTO @vProducto
CLOSE Depositos
DEALLOCATE Depositos
DECLARE Depositos CURSOR
KEYSET
FOR SELECT FDEPOSITO FROM ARTMOVTABLA WHERE
FARTSELECCION = 'PESCA' GROUP BY FDEPOSITO ORDER BY
FDEPOSITO
OPEN Depositos
IF @@CURSOR_ROWS > 0
BEGIN
FETCH NEXT FROM depositos
INTO @vDeposito
SELECT @vAcumula =( SELECT SUM(FCANTIDAD)
FROM ARTMOVTABLA WHERE FARTSELECCION = 'PESCA' AND
FARTICULO =@vProducto AND FDEPOSITO=@vDeposito)
SELECT @Sentencia = 'INSERT INTO
##PRODUCTOS VALUES ('+CHAR(39)+@vProducto+CHAR(39)
+', '+@vAcumula
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Depositos
INTO @vDeposito
IF @@FETCH_STATUS = 0
BEGIN
SELECT @vAcumula =( SELECT SUM
(FCANTIDAD) FROM ARTMOVTABLA WHERE FARTSELECCION
= 'PESCA' AND FARTICULO =@vProducto AND
FDEPOSITO=@vDeposito)
IF @vAcumula IS NULL
BEGIN
SELECT @vAcumula = 0
END
SELECT @Sentencia = @Sentencia
+ ',' + @vAcumula
END
END
END
SELECT @Sentencia = @Sentencia + ')'
Articulo con la cantidad por cada deposito
EXEC (@Sentencia)
PRINT 'Insert 1 en tabla: ##PRODUCTOS '+@vProducto
PRINT @Sentencia
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Productos
INTO @vProducto
IF @@FETCH_STATUS = 0
...
Muchas gracias anticipadas.
Claudio
Leer las respuestas