Как установить триггер, который бы не позволял удалять значения в конкретном столбце? - PullRequest
0 голосов
/ 04 мая 2019

У меня есть такая простая таблица: MARK {IdMark Int, IdStudent Int, Value Int, Тема Varchar (10)}

и я хотел бы создать триггер, который не позволял бы удалять строки в этой таблице, но должна быть возможность изменять значения в столбце «Значение», если он не равен NULL.

Код ниже не работает, как я хотел бы вообще:

CREATE TRIGGER delValue
ON mark
FOR INSERT, UPDATE, DELETE
AS
IF EXISTS(SELECT 1 FROM inserted i JOIN deleted d ON i.IdMark = d.IdMark WHERE i.IdMark IS NULL)
    BEGIN
        RAISERROR('You can't delete marks!', 16, 1)
        ROLLBACK
    END

1 Ответ

1 голос
/ 04 мая 2019

Попробуйте следующее:

Вам нужно только проверить inserted на нулевые значения.И если в inserted ничего нет, а в deleted что-то есть, то это удаление.

Кроме того, следите за тем, чтобы в сообщении использовались одинарные кавычки, вам нужно избегать их (повторяя их).

CREATE TRIGGER delValue
ON mark
FOR INSERT, UPDATE, DELETE
AS
begin
  -- If attempting to set to null, rollback
  IF EXISTS (SELECT 1 FROM inserted WHERE IdMark IS NULL) BEGIN
    RAISERROR('You can''t set marks to null!', 16, 1);
    ROLLBACK;
  END
  -- If attempting to set to delete, rollback
  -- There will never be anything in inserted for a delete
  IF NOT EXISTS (SELECT 1 FROM inserted) and EXISTS (SELECT 1 FROM Deleted) BEGIN
    RAISERROR('You can''t delete marks!', 16, 1);
    ROLLBACK;
  END
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...