• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Ошибка При Срабатывании Триггера

  • Автор темы Cristi-a-n
  • Дата начала
Статус
Закрыто для дальнейших ответов.
C

Cristi-a-n

Здравствуйте. Нужно создать три триггера: на insert, delete, update так, чтобы при изменении таблицы вручную, триггер срабатывал и выполнял изменения и в другой таблице.
Триггер на insert работает верно:
Код:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Триггер_ins]
ON [dbo].[Registration] FOR INSERT
AS
IF @@ROWCOUNT=1
BEGIN
IF(SELECT Books.bCopyes
FROM Books,inserted
WHERE Books.bCode=inserted.bCode)<=0
BEGIN
ROLLBACK TRAN
PRINT 'Отмена. Книги нет в наличии!'
END
ELSE
BEGIN
DECLARE @y INT
SELECT @y=bCode
FROM inserted
UPDATE Books
SET bCopyes=bCopyes-1
WHERE bCode=@y
END
END
Триггер на delete аналогичный:
Код:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Триггер_del]
ON [dbo].[Registration] FOR DELETE
AS
IF @@ROWCOUNT=1
BEGIN
DECLARE @y INT
SELECT @y=bCode
FROM deleted
UPDATE Books
SET bCopyes=bCopyes+1
WHERE bCode=@y
END
Он срабатывает верно при выполнении запроса DELETE. Но при удалении строки из таблицы SQL выдает ошибку: " ... Сведение об ошибке: Значения строки обновлены или удалены, либо не делают строку уникальной, либо они изменяют несколько строк (строк: 2)".

С триггером на update такая же проблема, ошибка аналогичная. Подскажите, в чем проблема. Заранее спасибо.
 
M

-master-

А зачем они вообще нужны? ваши копии можно и без триггеров определить, они только усложняют жизнь
 
M

-master-

Тогда объясняйте что к чему.
фраза "Он срабатывает верно при выполнении запроса DELETE. Но при удалении строки из таблицы" непонятная, делете и удаление - одно и тоже, как оно не работает и работает?
 
C

Cristi-a-n

Не работал при удалении из таблицы вручную, не запросом, а нажатием delete на клавиатуре или с помощью контекстного меню.
Но проблема уже решена, не был задан первичный ключ в таблице.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!