Почему я получаю "Курсор с именем уже существует"?
У меня есть этот триггер:
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
Когда я вставляю в таблицу TDINCI
INSERT INTO TDINCI
VALUES (1, '20150101', '20150115', '2015-2015')
Я получаю сообщение об ошибке:
Курсор с именем "detailsCursor" уже существует.
Я открываю
open detailsCursor;
и закройте курсор.
close detailsCursor;
deallocate detailsCursor;
Может быть, есть что-то с объемом курсора, который мне не удается? Спасибо заранее.
Ответы
Ответ 1
Вы используете глобальный курсор, который будет определяться каждый раз, когда вы вызываете эту процедуру и выдаете ту же ошибку.
Определите локальный курсор. Просто поставьте ключевое слово LOCAL
после CURSOR
:
declare detailsCursor CURSOR LOCAL FOR
...