当前位置: 代码迷 >> Sql Server >> Update 数据表时自动求怎么写SQL语句呢(使用SQL Sever)?(设计触发器或存储过程吧)
  详细解决方案

Update 数据表时自动求怎么写SQL语句呢(使用SQL Sever)?(设计触发器或存储过程吧)

热度:257   发布时间:2016-04-24 09:35:59.0
Update 数据表时自动求如何写SQL语句呢(使用SQL Sever)?(设计触发器或存储过程吧)
我有一个学生考试信息表:
考号,姓名,语文成绩,数学成绩,英语成绩,文综成绩,总成绩(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 行受影响)



  相关解决方案