简单的工资触发器

时间:2015-04-11 19:03:11

标签: sql sql-server triggers insert

我是sql的新手,我有一张员工表。我想创建一个触发器,以便没有人可以插入薪水少于200的新员工记录。我尝试了这段代码,但它不再接受任何记录,我看到这个错误"交易结束于触发。批次已中止。"不管薪水是多少。

这是我的代码

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

提前致谢

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

使用回滚时,它会将整个事务视为一个事务,因此如果触发器中的一个插入符合条件,则很遗憾地会回滚事务中的所有插入。

所以,基本上如果你想让它以这种方式运作,你就不能使用rollback作为选项,否则它将删除此交易中的所有其他工资。

这是解决方法,当其中一个项目符合您在插入后不想要的条件时,您需要执行以下操作:

BEGIN
  IF ...
  DELETE FROM Table WHERE …
END