w3schools update recorrer for ejemplo cursores anidados sql sql-server tsql cursor

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.