工资的简单触发器

Simple trigger on salary

我是 sql 的新手,我有一名员工 table。我想创建一个触发器,以便没有人可以插入薪水低于 200 的新员工记录。我尝试了这段代码,但它不再接受任何记录,我看到这个错误 "The transaction ended in the trigger. The batch has been aborted." 无论薪水是多少。

这是我的代码

Create trigger Trig on Employees after insert
As
Begin
   if((Select count(EID) from inserted where salary<200)>0)
      Rollback
   else
      Commit
End

提前致谢

当使用回滚时,它会将整个事务视为一个事务,因此如果触发器中的插入之一满足条件,它将不幸地回滚事务中的所有插入。

所以,基本上如果你想让它以这种方式工作,你将无法使用 rollback 作为一个选项,否则它将从该交易中删除所有其他工资。

解决方法是,当其中一项在插入后满足您不想要的条件时,您将需要执行如下操作:

BEGIN
  IF ...
  DELETE FROM Table WHERE …
END

对于您的场景触发器不是一个好的解决方案。尝试在 Salary 列上添加检查约束。我认为 Check constraint 是解决你的问题的好方法

ALTER TABLE Employees
ADD CONSTRAINT chk_Salary CHECK (Salary>=200)

https://msdn.microsoft.com/en-us/library/ms187550.aspx