请教触发器问题——关于UPDATE

fangpeng2003 2003-08-22 10:01:54
项目表projects
project_id 主键
project_total 总金额
project_firstsum 前期付款
project_lastsum 后期付款
project_firscost 前期费用
project_lastcost 后期费用


提成表bonuses
bonus_id 主键
bonus_first 前期分配
bonus_last 后期分配
project_id 外键
employee_id 外键


规则:
1。bonus_first(前期分配)=project_firstsum(前期付款)-project_firscost(前期费用)
2。如果(project_firstsum+project_lastsum)/project_total>=90%
则bonus_last(后期分配)=project_lastsum(后期付款)-project_lastcost(后期费用)
否则,bonus_last(后期分配)=0

问题:
1。因为前后期费用是不断变化的,则前后期分配金额也会相应发生变化
2。后期付款可能在中途才会添加,所以,需要判断规则2是否成立,并相应设置后期提成

特向高手求教触发器写法

...全文
18 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-08-23
  • 打赏
  • 举报
回复
1。因为前后期费用是不断变化的,则前后期分配金额也会相应发生变化
2。后期付款可能在中途才会添加,所以,需要判断规则2是否成立,并相应设置后期提成

CREATE TRIGGER 名1 ON projects
FOR update
AS
if update(project_lastcost)
begin
update bonuses set bonus_last=case when tem.project_firstsum+tem.project_lastsum)/tem.project_total>=90 then tem.project_lastsum-tem.project_lastcost else 0 end from inserted tem where bonuses.project_id=tem.project_id
end
fangpeng2003 2003-08-23
  • 打赏
  • 举报
回复
还有什么连接条件呢?
8992026 2003-08-22
  • 打赏
  • 举报
回复
CREATE TRIGGER TR_projects_UPDATE
ON projects
FOR UPDATE
AS

UPDATE bonuses
SET bonus_first=A.project_firstsum-A.project_firscost,
bonus_last=CASE WHEN (project_firstsum+project_lastsum)/project_total>=0.9 THEN A.project_lastsum-project_lastcost
ELSE 0
END
FROM INSERTED A
WHERE A.project_id=bonuses.project_id


GO

好像连接条件不够,你没有说明

34,576

社区成员

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

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