【发布时间】:2019-05-03 22:47:27
【问题描述】:
我有一个像这样的简单表格:
MARK {IdMark Int, IdStudent Int, Value Int, Subject 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
【问题讨论】:
-
似乎您可以考虑设置用户权限
-
我认为不必像你提议的那样去做。我相信这个练习非常简单,我引用了“创建不允许删除标记的触发器”:)。
-
只需将定义更改为
FOR DELETE并始终引发错误。 (投掷是更好的选择)。 -
@DaleBurrell 更改了它,但我仍然可以删除 MARK 表中的行...哦 nvm 忘了删除 IF 部分:)
-
@DaleBurrell 是的,谢谢 :)
标签: sql-server triggers sql-delete