--创建表 if exists(select * from sysobjects where name='zf')
drop table zf create table zf
(
学号 numeric(8,0) primary key,
姓名 varchar(20) not null,
总分 float null,
等级 char(4) null
) if exists(select * from sysobjects where name='shuxue')
drop table shuxue create table shuxue
(
学号 numeric(8,0),
分数 float null
) if exists(select * from sysobjects where name='english')
drop table english create table english
(
学号 numeric(8,0),
分数 float null
) if exists(select * from sysobjects where name='computer')
drop table computer create table computer
(
学号 numeric(8,0),
分数 float null
) if exists(select * from sysobjects where name='yuwen')
drop table yuwen create table yuwen
(
学号 numeric(8,0),
分数 float null
) select * from zf
--------触发器--------------
if exists(select * from sysobjects where name='trig_shuxue')
drop trigger trig_shuxue create trigger trig_shuxue on shuxue for insert as
declare @学号 int,@分数 int
select @学号=学号,@分数=分数 from shuxue
if @分数> =0 and @分数 <=100
begin
update zf set 总分=总分+@分数 where @学号=学号
end
go if exists(select * from sysobjects where name='trig_english')
drop trigger trig_english create trigger trig_english on english for insert as
declare @学号 int,@分数 int
select @学号=学号,@分数=分数 from english
if @分数> =0 and @分数 <=100
begin
update zf set 总分=总分+@分数 where @学号=学号
end
go if exists(select * from sysobjects where name='trig_computer')
drop trigger trig_computer create trigger trig_computer on computer for insert as
declare @学号 int,@分数 int
select @学号=学号,@分数=分数 from computer
if @分数> =0 and @分数 <=100
begin
update zf set 总分=总分+@分数 where @学号=学号
end
go if exists(select * from sysobjects where name='trig_yuwen')
drop trigger trig_yuwen create trigger trig_yuwen on yuwen for insert as
declare @学号 int,@分数 int
select @学号=学号,@分数=分数 from yuwen
if @分数> =0 and @分数 <=100
begin
update zf set 总分=总分+@分数 where @学号=学号
end
go -----------------输入值---------------- insert into zf values(20050001,'tom',0,'?')
insert into zf values(20050002,'jane',0,'?')
insert into zf values(20050003,'bush',0,'?')
insert into zf values(20050004,'hani',0,'?')
insert into zf values(20050005,'toms',0,'?')
insert into zf values(20050006,'janes',0,'?')
--select * from zf
--drop table zf
insert into shuxue values(20050001,60)
insert into shuxue values(20050002,45)
insert into shuxue values(20050003,80)
insert into shuxue values(20050004,76)
insert into shuxue values(20050005,94)
insert into shuxue values(20050006,84)
--select * from shuxue
--select * from zf
--
insert into english values(20050001,54)
insert into english values(20050002,45)
insert into english values(20050003,82)
insert into english values(20050004,76)
insert into english values(20050005,81)
insert into english values(20050006,88)
--select * from english
--select * from zf
--
insert into computer values(20050001,42)
insert into computer values(20050002,64)
insert into computer values(20050003,80)
insert into computer values(20050004,76)
insert into computer values(20050005,86)
insert into computer values(20050006,84)
--select * from computer
--select * from zf
--
insert into yuwen values(20050001,86)
insert into yuwen values(20050002,84)
insert into yuwen values(20050003,87)
insert into yuwen values(20050004,78)
insert into yuwen values(20050005,42)
insert into yuwen values(20050006,41)
--select * from yuwen
select * from zf
-- 各位大哥~~小弟今年18,刚学SQL不久,今天忙了一下午~打算玩个小“项目”,但是到现在,预期目的还没有达到~
简单点就是想在建立一个触发器,依实时变化的总分更新ZF表中的等级~
更复杂点目的就是想在每次输入成绩的时候,依据总分,和输入的课程次数判定等级,比如输入三门课程成绩后,总分> 250为优秀,总分> 210为良好,总分> 150为及格,0 <总分 <150为不及格, 跪求各位大哥大嫂~大叔大妈~偶郁闷了N久,没人问~只能在BBS里发贴啦~~盼您的“馅饼”
drop table zf create table zf
(
学号 numeric(8,0) primary key,
姓名 varchar(20) not null,
总分 float null,
等级 char(4) null
) if exists(select * from sysobjects where name='shuxue')
drop table shuxue create table shuxue
(
学号 numeric(8,0),
分数 float null
) if exists(select * from sysobjects where name='english')
drop table english create table english
(
学号 numeric(8,0),
分数 float null
) if exists(select * from sysobjects where name='computer')
drop table computer create table computer
(
学号 numeric(8,0),
分数 float null
) if exists(select * from sysobjects where name='yuwen')
drop table yuwen create table yuwen
(
学号 numeric(8,0),
分数 float null
) select * from zf
--------触发器--------------
if exists(select * from sysobjects where name='trig_shuxue')
drop trigger trig_shuxue create trigger trig_shuxue on shuxue for insert as
declare @学号 int,@分数 int
select @学号=学号,@分数=分数 from shuxue
if @分数> =0 and @分数 <=100
begin
update zf set 总分=总分+@分数 where @学号=学号
end
go if exists(select * from sysobjects where name='trig_english')
drop trigger trig_english create trigger trig_english on english for insert as
declare @学号 int,@分数 int
select @学号=学号,@分数=分数 from english
if @分数> =0 and @分数 <=100
begin
update zf set 总分=总分+@分数 where @学号=学号
end
go if exists(select * from sysobjects where name='trig_computer')
drop trigger trig_computer create trigger trig_computer on computer for insert as
declare @学号 int,@分数 int
select @学号=学号,@分数=分数 from computer
if @分数> =0 and @分数 <=100
begin
update zf set 总分=总分+@分数 where @学号=学号
end
go if exists(select * from sysobjects where name='trig_yuwen')
drop trigger trig_yuwen create trigger trig_yuwen on yuwen for insert as
declare @学号 int,@分数 int
select @学号=学号,@分数=分数 from yuwen
if @分数> =0 and @分数 <=100
begin
update zf set 总分=总分+@分数 where @学号=学号
end
go -----------------输入值---------------- insert into zf values(20050001,'tom',0,'?')
insert into zf values(20050002,'jane',0,'?')
insert into zf values(20050003,'bush',0,'?')
insert into zf values(20050004,'hani',0,'?')
insert into zf values(20050005,'toms',0,'?')
insert into zf values(20050006,'janes',0,'?')
--select * from zf
--drop table zf
insert into shuxue values(20050001,60)
insert into shuxue values(20050002,45)
insert into shuxue values(20050003,80)
insert into shuxue values(20050004,76)
insert into shuxue values(20050005,94)
insert into shuxue values(20050006,84)
--select * from shuxue
--select * from zf
--
insert into english values(20050001,54)
insert into english values(20050002,45)
insert into english values(20050003,82)
insert into english values(20050004,76)
insert into english values(20050005,81)
insert into english values(20050006,88)
--select * from english
--select * from zf
--
insert into computer values(20050001,42)
insert into computer values(20050002,64)
insert into computer values(20050003,80)
insert into computer values(20050004,76)
insert into computer values(20050005,86)
insert into computer values(20050006,84)
--select * from computer
--select * from zf
--
insert into yuwen values(20050001,86)
insert into yuwen values(20050002,84)
insert into yuwen values(20050003,87)
insert into yuwen values(20050004,78)
insert into yuwen values(20050005,42)
insert into yuwen values(20050006,41)
--select * from yuwen
select * from zf
-- 各位大哥~~小弟今年18,刚学SQL不久,今天忙了一下午~打算玩个小“项目”,但是到现在,预期目的还没有达到~
简单点就是想在建立一个触发器,依实时变化的总分更新ZF表中的等级~
更复杂点目的就是想在每次输入成绩的时候,依据总分,和输入的课程次数判定等级,比如输入三门课程成绩后,总分> 250为优秀,总分> 210为良好,总分> 150为及格,0 <总分 <150为不及格, 跪求各位大哥大嫂~大叔大妈~偶郁闷了N久,没人问~只能在BBS里发贴啦~~盼您的“馅饼”
解决方案 »
- SQL 将两条数据并成一条
- 类型化和非类型化 XML 列各自的优势是什么?
- 三个表的汇总, 不能用游标, 因为数据实在太大了. 解决问题者另开帖敬上100分.
- 如何获取表中行最新修改的时间
- 请教:请问这个SQL SERVER 语句该怎么写?
- 请问:如何在基本表中添加带有约束的属性列?
- 这个错误怎么解决?-----"[OLE/DB provider returned message: 既不支持隔离层,也不支持加强型。]"
- 面试问题:什么情况下不需要主键
- 如何在TRIGGER(触发器)中调用外部DLL(扩展存储过程)并且执行DLL中的函数!???
- 谁能捐我点可用分。想问asp问题都没分。
- 关于表变量的问题
- 问一个关于双重查询的问题
--建议看看我的Blog,触发器常见问题你这都有,简单点评一个create trigger trig_shuxue on shuxue
for insert as --只处理insert 或许不是大问题
declare @学号 int,@分数 int -- 很奇怪,问什么数据类型是int
select @学号=学号,@分数=分数 from shuxue --这句莫名其妙,下面的不评了,
if @分数> =0 and @分数 <=100
begin
update zf set 总分=总分+@分数 where @学号=学号
end
go --写个大概的给你吧,只计算总分的,因为你下面评级的要求很难做,原因是你的表结构不合理,应该加个课程数
--或者平均分在zf表,注释的代码你可以参考下create trigger trig_shuxue on shuxue
for insert as --只处理insert 或许不是大问题
update zf set 总分=zf.总分+i.分数
from inserted i,zf
where i.学号=zf.学号
go /* 假设有已经输入课程数字段
create trigger trig_shuxue on shuxue
for insert as --只处理insert 或许不是大问题
update zf set 总分=zf.总分+i.分数,已经输入课程数=zf.已经输入课程数+1,
等级=case when zf.已经输入课程数+1<>3 then zf.等级
else case when zf.总分+i.分数> 250 then '优秀' when zf.总分+i.分数>210 then '良好' when zf.总分+i.分数>150 then '及格' else '不及格' end end
from inserted i,zf
where i.学号=zf.学号
go
create trigger trig_shuxue on shuxue for insert
as
update zf set 总分=分数,等级=case when 分数 >250 then '优秀'
when 分数> 210 and 分数<250 then '良好'
when 分数<210 and 分数> 150 then '及格'
when 分数 <150 then '不及' end
from zf inner join
(
select 学号,Sum(isnull(分数,0)) 分数
from
(select * from shuxue
union all
select * from english
union all
select * from computer
union all
select * from yuwen ) as T
group by 学号) as t2
on zf.学号=t2学号
[code]
create trigger trig_shuxue on shuxue for insert
as
update zf set 总分=分数,等级=case when 分数 >250 then '优秀'
when 分数> 210 and 分数<250 then '良好'
when 分数<210 and 分数> 150 then '及格'
when 分数 <150 then '不及' end
from zf inner join
(
select 学号,Sum(isnull(分数,0)) 分数
from
(select * from shuxue
union all
select * from english
union all
select * from computer
union all
select * from yuwen ) as T
group by 学号) as t2
on zf.学号=t2学号
四个表的触发器一样就行
go
--创建表
if exists(select * from sysobjects where name='dd_学科')
drop table dd_学科 create table dd_学科
(
学科ID tinyint not null primary key,
学科Name nvarchar(32)
)
/* 1:数学, 2:英语, 3:计算机, 4: 语文*/
insert into dd_学科 values (1,'数学')
insert into dd_学科 values (2,'英语')
insert into dd_学科 values (3,'计算机')
insert into dd_学科 values (4,'语文')
goif exists(select * from sysobjects where name='学分')
drop table 学分 create table 学分
(
学号 numeric(8,0),
学科 tinyint,
分数 float null
) if exists(select * from sysobjects where name='学生成绩')
drop table 学生成绩 create table 学生成绩
(
学号 numeric(8,0) primary key,
姓名 varchar(20) not null,
总分 float null,
等级 char(4) null
)
go
-- 直接计算
update 学生成绩 set
总分 = b.总分
,等级 = case when 学科数>=3 then
case
when b.总分 >= 250 then '优秀'
when b.总分 >= 210 then '良好'
when b.总分 >= 150 then '及格'
else '不及格' end
end
from 学生成绩 a
join (
select 学号, 总分 = sum(分数), 学科数 = count(学科)
from 学分
group by 学号
) b on a.学号=b.学号
go
--
if exists(select * from sysobjects where name='trig_学分')
drop trigger trig_学分
go
create trigger trig_学分 on 学分 for insert
as begin
update 学生成绩 set
总分 = 总分 + 分数
,等级 = case when (select count(1) from 学分 b where 学号=i.学号) >=3 then
case
when (总分 + 分数) >= 250 then '优秀'
when (总分 + 分数) >= 210 then '良好'
when (总分 + 分数) >= 150 then '及格'
else '不及格' end
end
from 学生成绩 a, inserted i
where a.学号=i.学号
end
go-----------------输入值----------------
insert into 学生成绩 values(20050001,'tom',0,NULL)
insert into 学生成绩 values(20050002,'jane',0,NULL)
insert into 学生成绩 values(20050003,'bush',0,NULL)
insert into 学生成绩 values(20050004,'hani',0,NULL)
insert into 学生成绩 values(20050005,'toms',0,NULL)
insert into 学生成绩 values(20050006,'janes',0,NULL)
--select * from zf
--drop table zf
insert into 学分 values(20050001,1,60)
insert into 学分 values(20050002,1,45)
insert into 学分 values(20050003,1,80)
insert into 学分 values(20050004,1,76)
insert into 学分 values(20050005,1,94)
insert into 学分 values(20050006,1,84)
--select * from shuxue
--select * from zf
--
insert into 学分 values(20050001,2,54)
insert into 学分 values(20050002,2,45)
insert into 学分 values(20050003,2,82)
insert into 学分 values(20050004,2,76)
insert into 学分 values(20050005,2,81)
insert into 学分 values(20050006,2,88)
--select * from english
--select * from zf
--
insert into 学分 values(20050001,3,42)
insert into 学分 values(20050002,3,64)
insert into 学分 values(20050003,3,80)
insert into 学分 values(20050004,3,76)
insert into 学分 values(20050005,3,86)
insert into 学分 values(20050006,3,84)
--select * from computer
--select * from zf
--
insert into 学分 values(20050001,4,86)
insert into 学分 values(20050002,4,84)
insert into 学分 values(20050003,4,87)
insert into 学分 values(20050004,4,78)
insert into 学分 values(20050005,4,42)
insert into 学分 values(20050006,4,41)
--select * from yuwen
select * from 学生成绩 drop table 学生成绩,学分,dd_学科
20050001 tom 242.0 良好
20050002 jane 238.0 良好
20050003 bush 329.0 优秀
20050004 hani 306.0 优秀
20050005 toms 303.0 优秀
20050006 janes 297.0 优秀
用不到触发器吧