我是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
提前致谢
答案 0 :(得分:2)
对于您的场景,触发器不是一个好的解决方案。尝试在Salary列上添加检查约束。我认为Check约束是解决问题的好方法
ALTER TABLE Employees
ADD CONSTRAINT chk_Salary CHECK (Salary>=200)
答案 1 :(得分:1)
使用回滚时,它会将整个事务视为一个事务,因此如果触发器中的一个插入符合条件,则很遗憾地会回滚事务中的所有插入。
所以,基本上如果你想让它以这种方式运作,你就不能使用rollback
作为选项,否则它将删除此交易中的所有其他工资。
这是解决方法,当其中一个项目符合您在插入后不想要的条件时,您需要执行以下操作:
BEGIN
IF ...
DELETE FROM Table WHERE …
END