注册 登录
编程论坛 SQL Server论坛

在运动员表中建立UPDATE触发器tr1,若更新了运动员表中的运动员编号,则相应更新比赛积分表的运动员编号。

花脸 发布于 2017-05-25 21:40, 2199 次点击
老师没怎么讲 没有编程的思路 求各位指点


在运动员表中建立UPDATE触发器tr1,若更新了运动员表中的运动员编号,则相应更新比赛积分表的运动员编号。
  match_score是积分表 player_no 是运动员编号, pro_no是项目编号 score 是积分
  ath_man是运动员表 ath_no是运动员编号,ath_name是运动员姓名,ath_sex是运动员性别,ath_major是运动员专业


[此贴子已经被作者于2017-5-25 21:43编辑过]

3 回复
#2
mywisdom882017-05-29 11:40
-- 触发器tr1,若更新了运动员表中的运动员编号,则相应更新比赛积分表的运动员编号。
-- 运动员表(ath_man),运动员编号(ath_no),运动员姓名(ath_name),运动员性别(ath_sex),运动员专业(ath_major)
-- 积分表(match_score),运动员编号(player_no),项目编号(pro_no),积分(score)

/*
-- 如下列子,测试数据,只运行1次
-- 运动员(编号 varchar(6),姓名 varchar(20))
-- 成绩表(编号 varchar(6),项目 varchar(20),成绩 numeric(5,2))

create table 运动员(编号 varchar(6),姓名 varchar(20))
insert into 运动员(编号,姓名)
select '1001','张三' union all
select '1002','李四' union all
select '1003','王五'

create table 成绩表(编号 varchar(6),项目 varchar(20),成绩 numeric(5,2))
insert into 成绩表(编号,项目,成绩)
select '1001','跳舞',80.00 union all
select '1001','武术',90.50 union all
select '1002','跳舞',85.00 union all
select '1002','武术',95.00 union all
select '1003','跳舞',70.50 union all
select '1003','武术',75.50

*/
go

/*
--建立触发器,也只运行1次

create trigger 运动员_tr1
 On 运动员   --在那个表触发
 for Update --在什么事件触发
 As         --触发后做什么事情
 if Update(编号) --更新编号时才做事情,Deleted 是更新前的临时表,Inserted 是更新后的临时表
    begin
      update 成绩表 set 编号=i.编号 from 成绩表 c,Deleted d,Inserted i
      where c.编号=d.编号
    end
*/

go

-- 测试更新
update 运动员 set 编号='B1001' where 编号='1001'

select * from 运动员
select * from 成绩表




#3
mywisdom882017-05-29 11:42
2楼
第1次运行时,先把 所有的 /*,*/去掉
第2次运行时,就是2楼的内容
#4
花脸2017-05-30 17:48
回复 2楼 mywisdom88
好的谢谢你
1