2017-05-25 123 views
0

你好我试图创建一个相对简单的触发器,当一个员工被插入到我的表中认证(这是我的多对多关系所在的位置,每个员工可以获得多个工作的认证,每个工作可以由一个以上的员工完成) 我希望触发器检查是否包括插入的记录,员工现在可以在3个以上的工作中获得认证,从而提高他10%的工作量。 这是我第一次尝试,但后来我意识到,我做了什么影响整个表:如何选择表中的最后一个插入的记录SQL中

create trigger raise 
on certified 
after insert 
as 
begin 
update employees set salary = salary + (salary*0.1) 
where (select count(job_id) from certified where empid = (select empid from 
inserted) group by empid)>3 
end 

我的问题是,怎么可能只得到最后插入的记录?

+0

不是答案,但是如果员工不需要3个或更多的工作认证,您可能需要另一个程序来取消加薪。 –

+0

我相信你正在寻找一个输出语句。 – jmag

+0

因此,对于每次获得至少三次新认证,他们将获得额外10%的加薪?如果一个特定的员工有11个认证,他们将获得8%的薪资增长,这将使薪水增加一倍以上。 –

回答

0

最后插入的记录位于“插入”表内。

我认为下面的这个更新将解决这个问题。请记住,只有在第一次认证工作增加到3以上时,你才应该提高工资。你不应该增加第5或第6认证工作的工资。

update employees set salary=salary + (salary*0.1) 
where empid in 
(select empid from certified where empid in 
    (select empid from inserted) and (select count(job_id) 
    from certified b 
    where b.empid=certified.empid)=3+ 
     (select count(job_id) from inserted 
      where inserted.empid=certified.empid) 
) 

还记得建立一个删除触发器。但是,作为开发人员,我不会在触发器中构建此业务规则。

相关问题