update - recorrer cursor sql server
¿Por qué aparece "Ya existe un cursor con el nombre"? (1)
Está utilizando el cursor global que se definirá cada vez que llame a este procedimiento y le dará el mismo error.
Definir un cursor local. Simplemente coloque la palabra clave LOCAL
después de CURSOR
:
declare detailsCursor CURSOR LOCAL FOR
...
Tengo este gatillo
CREATE TRIGGER CHECKINGMAXQTYDAYSVACANCY
ON TDINCI
AFTER INSERT
AS
DECLARE
@incidentCode int,
@dateStart datetime,
@dateEnd datetime,
@daysAccumulated int,
@maxDaysAvailable int
set @daysAccumulated = 0;
select @incidentCode = CO_INCI from inserted;
select @maxDaysAvailable = IN_DIAS_GANA from TCINCI
where CO_INCI = @incidentCode;
declare detailsCursor CURSOR FOR
select FE_INIC, FE_FINA from TDINCI
where CO_INCI = @incidentCode;
open detailsCursor;
if CURSOR_STATUS(''variable'', ''detailsCursor'') >= 0
begin
fetch next from detailsCursor
into @dateStart, @dateEnd;
while @@FETCH_STATUS = 0
begin
set @daysAccumulated = @daysAccumulated + (DATEDIFF(DAY, @dateStart, @dateEnd) + 1);
fetch next from detailsCursor
into @dateStart, @dateEnd;
end
close detailsCursor;
deallocate detailsCursor;
end
IF(@maxDaysAvailable > @daysAccumulated)
BEGIN
RAISERROR (''No se pueden ingresar mas dias de los programados en la cabecera de incidencias.'', 16, 1);
ROLLBACK TRANSACTION;
RETURN
END
GO
Cuando hago un Insertar a la mesa TDINCI
INSERT INTO TDINCI
VALUES (1, ''20150101'', ''20150115'', ''2015-2015'')
Me sale un error:
Ya existe un cursor con el nombre ''detailsCursor''.
yo abro
open detailsCursor;
y cierre el cursor.
close detailsCursor;
deallocate detailsCursor;
Tal vez hay algo con el alcance del cursor que no manejo? Gracias por adelantado.