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

Тема в разделе "SQL", создана пользователем Cristi-a-n, 16 май 2013.

Статус темы:
Закрыта.
  1. Cristi-a-n

    Cristi-a-n New Member

    Регистрация:
    16 май 2013
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте. Нужно создать три триггера: на insert, delete, update так, чтобы при изменении таблицы вручную, триггер срабатывал и выполнял изменения и в другой таблице.
    Триггер на insert работает верно:
    Код (Text):
    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 аналогичный:
    Код (Text):
    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 такая же проблема, ошибка аналогичная. Подскажите, в чем проблема. Заранее спасибо.
     
  2. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    А зачем они вообще нужны? ваши копии можно и без триггеров определить, они только усложняют жизнь
     
  3. Cristi-a-n

    Cristi-a-n New Member

    Регистрация:
    16 май 2013
    Сообщения:
    3
    Симпатии:
    0

    Это учебное задание, нужно сдать.
     
  4. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    Тогда объясняйте что к чему.
    фраза "Он срабатывает верно при выполнении запроса DELETE. Но при удалении строки из таблицы" непонятная, делете и удаление - одно и тоже, как оно не работает и работает?
     
  5. Cristi-a-n

    Cristi-a-n New Member

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

Поделиться этой страницей