使用触发器忽略插入
Posted
技术标签:
【中文标题】使用触发器忽略插入【英文标题】:Ignoring an Insert Using a Trigger 【发布时间】:2011-02-15 13:14:18 【问题描述】:我有一个包含三个表 User(userID, Firstname, LastName)、Movies(MovieID, MovieName) 和 UserMovies(MovieID, userID) 的数据库。我在 User 表中还有一个触发器,我希望在 Insert 之后运行它来确定提供的 userID 是否已经存在。如果提供的 userID 存在于表中,我该如何忽略触发触发器并开始操作 Movies 表的插入(我的下一个 INSERT 命令)?我尝试使用 RETURN
如果存在(从插入中选择 insert.userID) 返回
但这对我不起作用。谢谢。
【问题讨论】:
【参考方案1】:如果您想根据某些条件限制数据插入,您应该在before trigger
中进行。在这里,检查一下 user_id 是否已经存在。如果是这样,那么您可以通过回滚事务来限制将该数据插入表中。
【讨论】:
【参考方案2】:在触发函数中引发异常。
RAISERROR ('Error Text', 11, 1);
我不知道在触发器函数中“忽略”插入的另一种方法。由于该函数是由 INSERT 命令触发的,因此 INSERT 应该发生或发生错误。
另一种方法是编写一个存储过程,在尝试插入之前检查您的情况。
【讨论】:
以上是关于使用触发器忽略插入的主要内容,如果未能解决你的问题,请参考以下文章