主题:  【FOR SQLserver2000 的触发器问题】

busyfish

职务:普通成员
等级:1
金币:0.0
发贴:8
#12004/5/5 10:51:52
问题1:关于SQL的请大家帮个忙或者给个思路
设计触发器当往SC表插入学号(sno)一定要在S表中,课程号(cno)一定要在C表中以上有一项不符和拒绝操作

S表放有学号(sno)
SC表有学号(SNO)课程号(cno)
C表有cno(课程号)

问题2:先创建平均成绩的表只要在SC表中修改久重新算成绩
SC表有学号(SNO)课程号(cno)成绩(g)

这些问题我百思不得其解希望各位高手帮忙谢谢啦



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#22004/5/5 11:31:31
首先,对于学号和课程号存在多对多的关系,你的表设计基本上没问题

对于第一个问题,你可以设置一个关系(relation)来强制必须先存在s表的主键(cno),才能完成插入操作(逻辑上也应该是这样,外键必须指向已存在的主键)

第二个问题可以在触发器中作如下判断:
DECLARE @sno int
DECLARE @avgscore int
IF UPDATE(g)
BEGIN
  select @sno=sno from inserted
  select @avgscore=avg(g) from sc where sno=@sno

 -- update average score for s.g ...
 update s set g=@avgscore where sno=@sno
END