ПОСЛЕ УДАЛЕНИЯ, триггер ОБНОВЛЕНИЕ не работает правильно в SQL - PullRequest
0 голосов
/ 22 января 2020

Что-то странное происходит с одним из моих триггеров. Я построил триггер, который проверяет, пытается ли пользователь UPDATE или DELETE строка в таблице с [Released_Flag] = 'Y', и откатывает транзакцию, если это так. Однако, если пользователь пытается обновить поле Released_Flag с 'N' до 'Y' для строки, он все равно возвращает ошибку.

Мой триггер:

CREATE TRIGGER [dbo].[Prevent_Delete] ON  [dbo].[Data_Test]
AFTER DELETE, UPDATE
AS 
BEGIN
SET NOCOUNT ON

    DECLARE @Release_Flag char(1)
    SELECT @Release_Flag = [Release_Flag] FROM deleted

    IF @Release_Flag='Y'
    BEGIN
        RAISERROR('Cannot update or delete a RELEASED variable.',16,1)
        ROLLBACK
    END


END

выше вызывает некоторые проблемы в UPDATE заявлениях. Иногда возникает ошибка, даже если обновляемая строка имеет Release_Flag = 'N'. Любая идея, почему это может происходить?

Я также использовал SELECT * FROM [deleted] в триггере, чтобы увидеть, что происходит, и некоторые строки показывают Release_Flag = 'Y' в таблице [deleted], несмотря на то, что они на самом деле 'N'.

1 Ответ

0 голосов
/ 22 января 2020

Проблема с этим, которую я не осознавал, заключается в том, что у меня есть другой триггер на таблице, который ОБНОВЛЯЕТ таблицу. И поэтому старый триггер запускает этот новый триггер, чего я не учел.

Теперь я переместил секцию AFTER UPDATE этого нового триггера в мой старый триггер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...