create trigger upd_grade on Reports
for update,insert
as
update Students
set CreditHours=(select sum(CreditHours) from Courses where Cno in(
select Cno from Reports where Reports.Grade>=60 and Reports.Sno in(
select Sno from inserted)))where Students.Sno in(select Sno from inserted)
(select sum(CreditHours) from Courses where Cno in(
select Cno from Reports where Reports.Grade>=60 and Reports.Sno in(
select Sno from inserted)))
定义个参数,接收这个sum的值,然后再update。
写得太乱了,建议分开写,先把CreditHours查询出来,然后再写更新语句。
什么数据库,上SQLServer试了试,没问题
create table Reports(
Grade int default 0,
sno varchar(20),
cno varchar(20)
);
create table Students(
sno varchar(20),
CreditHours int default 0
);
create table Courses(
cno varchar(20),
CreditHours int default 0
)
insert into Students(sno) values('s1');
insert into Courses(cno,CreditHours) values('c1',20);
insert into Courses(cno,CreditHours) values('c2',10);
insert into Reports(Grade,sno,cno) values(60,'s1','c1');--插入这语句不报错
末尾少掉一个括号。为什么会少的?