34,587
社区成员
发帖
与我相关
我的任务
分享
----这里只适用单数据处理,多条数据自己根据实际作相映修改
create trigger trUpdateOvertime
on dbo.加班表
for update,insert
AS BEGIN
IF NOT EXISTS(SELECT * FROM DELETED) --insert触发
BEGIN
IF NOT EXISTS(select * from inserted where 申请状态='已确定')
RETURN
declare @i int,@a INT
select @i=折算,@a=加班时长 from inserted where 申请状态='已确定'
if(@i=1)
begin
update dbo.薪金表
set 加班补加薪金=加班补加薪金+8*@a
end
else
begin
update dbo.员工表
set 剩余假期=剩余假期+@a
end
END
ELSE ---update触发
begin
DECLARE @before_i INT,@before_a INT,@before_status VARCHAR(30)
DECLARE @after_i INT,@after_a INT,@after_status VARCHAR(30)
select @before_i=折算,@before_a=加班时长,@before_status=申请状态 from DELETED
select @after_i=折算,@after_a=加班时长,@after_status=申请状态 from inserted
IF @after_status='已确定' AND @before_status<>'已确定'
BEGIN
if(@after_i=1)
begin
update dbo.薪金表
set 加班补加薪金=加班补加薪金+8*@after_a
end
IF(@after_i=2)
begin
update dbo.员工表
set 剩余假期=剩余假期+@after_a
end
END
IF @after_status<>'已确定' AND @before_status='已确定'
BEGIN
if(@before_status=1)
begin
update dbo.薪金表
set 加班补加薪金=加班补加薪金-8*@before_a
end
IF(@before_status=2)
begin
update dbo.员工表
set 剩余假期=剩余假期-@before_a
end
END
IF @after_status='已确定' AND @before_status='已确定'
BEGIN
IF(@before_status=1)
update dbo.薪金表
set 加班补加薪金=加班补加薪金-8*@before_a
IF(@before_status=2)
update dbo.员工表
set 剩余假期=剩余假期-@before_a
IF(@after_status=1)
update dbo.薪金表
set 加班补加薪金=加班补加薪金+8*@after_a
IF(@after_status=2)
update dbo.员工表
set 剩余假期=剩余假期+@after_a
end
end
end