Ho creato una stored procedure che mi deve restituire una tabella così definita
DECLARE @Riepilogo table
(
Id int identity(1,1),
DataReg datetime,
CodEsercizio smallint,
CodArt varchar(25),
UM varchar(4),
Qta float,
ImpUnit float,
CM_Unit float
)
Quindi riempio la tabella con una semplice query
A questo punto dichiaro un cursore
DECLARE mov_cursor CURSOR FOR
SELECT CodArt, CodEsercizio, Qta, ImpUnit
FROM @Riepilogo
ORDER BY CodArt, DataReg
FOR UPDATE OF CM_Unit
OPEN mov_cursor
FETCH NEXT FROM mov_cursor INTO @CodArt, @CodEsercizio, @Qta, @ImpUnit
WHILE (@@FETCH_STATUS=0)
BEGIN
.....
-- Qui faccio dei calcoli su @cm
UPDATE @Riepilogo set CM_Unit=@cm where current of mov_cursor
FETCH NEXT FROM mov_cursor INTO @CodArt, @CodEsercizio, @Qta, @ImpUnit
END
CLOSE mov_cursor
DEALLOCATE mov_cursor
END
SELECT DataReg, CodEsercizio, CodArt, UM, Qta, ImpUnit, CM_Unit
FROM @Riepilogo
Quando eseguo la stored, vedo per un attimo (nemmeno un secondo vedo la tabella), ma poi mi vengono mostrati dei messaggi
Messaggio 16929, livello 16, stato 1, procedura NSPCalcoloCM, riga 82
Il cursore è READ ONLY.
L'istruzione è stata interrotta.
Cosa sbaglio?
Come alternativa ho pensato di inserire i record nella tabella @Riepilogo già ordinati tramite la query di INSERT.
Poi però sono sicura che il cursore scorre i record nell'ordine in cui sono inseriti (quindi rispettando l'ordinamento)? Dalle prove che ho fatto non sono riuscita a capire ben...
Grazie per l'aiuto