我有一个学生考试信息表:
考号,姓名,语文成绩,数学成绩,英语成绩,文综成绩,总成绩(PS:默认各科成绩,总成绩都为 0)在老师登分时只会登入各个科目的成绩,我使用的是SQL Sever数据库,当老师登入各科成绩时(使用Update),如何触发自动求和?谢谢!
------解决思路----------------------
你是要计算总分吗?
如果是计算总分的话,可以考虑在设计表的时候使用计算列实现。
[总成绩] as [语文成绩]+[数学成绩]+[英语成绩]+[文综成绩] PERSISTED
------解决思路----------------------
create table [学生考试信息表] (
[考号] varchar(20) not null,
[姓名] varchar(20) not null,
[语文成绩] int not null default(0), --默认值0
[数学成绩] int not null default(0),
[英语成绩] int not null default(0),
[文综成绩] int not null default(0),
[总成绩] as [语文成绩]+[数学成绩]+[英语成绩]+[文综成绩] PERSISTED
)
------解决思路----------------------
drop table sc
create table sc (
考号 int ,
姓名 varchar(10) ,
语文成绩 int default 0 ,
数学成绩 int default 0 ,
英语成绩 int default 0 ,
文综成绩 int default 0 ,
总成绩 int default 0
)
go
insert into sc(考号,姓名) values(1,'张三')
go
create trigger sc_up
on sc after update
as
begin
update sc
set 总成绩 = isnull(sc.语文成绩,0) + isnull(sc.数学成绩,0) + isnull(sc.英语成绩,0) + isnull(sc.文综成绩,0)
from inserted
where sc.考号 = inserted.考号
end
go
select * from sc
go
update sc set 语文成绩 =60 , 数学成绩 = 88 where 考号 = 1
go
select * from sc
(1 行受影响)
考号 姓名 语文成绩 数学成绩 英语成绩 文综成绩 总成绩
----------- ---------- ----------- ----------- ----------- ----------- -----------
1 张三 0 0 0 0 0
(1 行受影响)
(1 行受影响)
(1 行受影响)
考号 姓名 语文成绩 数学成绩 英语成绩 文综成绩 总成绩
----------- ---------- ----------- ----------- ----------- ----------- -----------
1 张三 60 88 0 0 148
(1 行受影响)