关于创建触发器的

锤子馆长 2015-01-06 06:49:39
感觉问题挺多...求大神帮忙修改
...全文
284 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
习惯性蹭分 2015-01-06
  • 打赏
  • 举报
回复

----这里只适用单数据处理,多条数据自己根据实际作相映修改
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
锤子馆长 2015-01-06
  • 打赏
  • 举报
回复
引用 9 楼 sz_haitao 的回复:
这种功能好像不应该用触发器吧 万一哪个环节错了,需要修改回去怎么办? 应该在算工资时,统一根据状态进行计算
题目就这样要求的 没办法
haitao 2015-01-06
  • 打赏
  • 举报
回复
这种功能好像不应该用触发器吧 万一哪个环节错了,需要修改回去怎么办? 应该在算工资时,统一根据状态进行计算
还在加载中灬 2015-01-06
  • 打赏
  • 举报
回复
这个触发器,在update的时候应该要特殊处理,不然你每更新一次,所有的都东西都在往上加
锤子馆长 2015-01-06
  • 打赏
  • 举报
回复
引用 2 楼 lovelj2012 的回复:
啥东东?看不到你的图片
好了 求帮助
锤子馆长 2015-01-06
  • 打赏
  • 举报
回复
图片发不上来
就只能这样了
加班表 加班ID 员工ID 考勤ID 提交时间 加班开始时间 加班结束时间 加班时长 加班原因 申请状态 折算 拒绝加班原因
薪金表 薪金ID 员工ID 月份 基本工资 加班补加薪金 缺勤扣除薪金 其他如奖金等薪金 当月总工资
锤子馆长 2015-01-06
  • 打赏
  • 举报
回复
引用 4 楼 ky_min 的回复:
建议你贴代码,图片虽然看得比较清楚,但不能复制代码,帮你研究研究,很烦的
rUpdateOvertime:此触发器在部门经理接受员工加班申请时触发。当员工请求加班类型为“折算成津贴”,按员工加班小时数、每小时津贴计算员工加班工资更新tblSalary(工资)表的OvertimeSalary(加班工资)字段。当员工请求加班类型为“折算成年假”,计算员工加班小时数更新tblEmployee(员工信息)表的VacationRemain(剩余假期小时数)字段; create trigger trUpdateOvertime on dbo.加班表 for update,insert as declare @i int,@a int select @i=折算,@a=加班时长 from dbo.加班表 where 申请状态='已确定' if(@i=1) begin update dbo.薪金表 set 加班补加薪金=加班补加薪金+8*@a end else begin update dbo.员工表 set 剩余假期=剩余假期+@i
还在加载中灬 2015-01-06
  • 打赏
  • 举报
回复
建议你贴代码,图片虽然看得比较清楚,但不能复制代码,帮你研究研究,很烦的
Neo_whl 2015-01-06
  • 打赏
  • 举报
回复
重贴下代码吧
江南小鱼 2015-01-06
  • 打赏
  • 举报
回复
啥东东?看不到你的图片
锤子馆长 2015-01-06
  • 打赏
  • 举报
回复

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧