一条sql update触发器的简单问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 20:31:26
为表student_course创建一个更新触发器,当更改表的成绩数据时,如果成绩由原来的小于60分更改为大于等于60分,该学生就能得到相应的学分;
如果成绩由原来的大于等于60分更改为小于60分,该学生就能相应的学分为0。

下面是表student_course的数据

course_id student_id grade credit semester school_year
---------- ---------- ----- ------ -------- -----------
dep04_b001 g9940201 88 4 0 1999/2000
dep04_b001 g9940202 78 4 0 1999/2000
dep04_b001 g9940203 88 4 0 1999/2000
dep04_b001 g9940204 56 0 0 1999/2000
dep04_b001 g9940205 45 0 0 1999/2000
dep04_b001 g9940206 98 4 0 1999/2000
dep04_b001 g9940207 87 4 0 1999/2000
dep04_s001 g9940201 89 5 1 2001/2002
dep04_s001 g9940202 78 5 1 2001/2002
dep04_s001 g9940203 44 0 1 2001/2002
dep04_s001 g9940204 65 5 1 2001/2002
dep04_s001 g9940205 52 0 1 2001/2002
dep04_

你是不是少写一张表啊。course_id与credit应该有张对应关系表吧!!

---补充
那你怎么知道每个course_id有多少学分呢。

下面的供参考吧
alter trigger update_trigger on student_course
for update
as
begin
declare @grade_old int
declare @grade_new int
declare @student_id char(8)
declare @course_id char(10)
select @grade_old = grade,@student_id = student_id,@course_id = course_id from deleted
select @grade_new = grade from inserted
if @grade_old < 60 and @grade_new >= 60
begin
update student_course
set credit = 4
where student_id = @student_id and course_id = @course_id
end
else if @grade_old >= 60 and @grade_new < 60
begin
update student_course
set credit = 0
where student_id = @student_id and course_id = @course_id
end
end
go

create trigger trigger_update
on student_course
for update
as
begin
declare @grade int,@gra