触发器 问题 令我很恶心

winter13292 2010-06-30 12:41:12
首先 先感谢下happyflystone
学生(学号,姓名,班级,性别,班号,籍贯,出生日期,所属系编号)
教室(教师编号,姓名,职称,所授课程,所属系编号)
课程(课程编号,课程名,课程积分)
项目(项目编号,项目名称,项目负责人)
系表 (系编号,系名称,系主任)
班级(班级编号,班级名称,所属系编号)
选课(学号,课程编号,成绩)
学分积表(学号,姓名,学分积)

求一触发器 将每个学生选课的课程获得的课程学分积累到 学分积表中 之后按照学校的规定 的可以毕业的学分积做个查询 就能判断哪些可以毕业 比如 select 姓名 from 学分积 where 学分积》100

学分积公式 sum((成绩-50)/10*课程学分)
谢谢各位高手
首先 先感谢下happyflystone

...全文
248 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
winter13292 2010-06-30
  • 打赏
  • 举报
回复
create trigger 学分积查询
on 选课表
for insert
as
begin
if (update (成绩))
update 学分积表
set 学分积=(select sum((成绩-50)/10*课程学分) from 成绩
inner join 课程表 on 成绩.课程编号=课程表.课程编号 where 学号=(select 学号 from 选课表 where 成绩=(select 成绩 from inserted))group by 学号)
where 学号 = 学分积表.学号

end
go
只是我又该得 还是不对
winter13292 2010-06-30
  • 打赏
  • 举报
回复
那你能看看我做的哪里不对吗 我很晕 对于触发器
Sharon_liu 2010-06-30
  • 打赏
  • 举报
回复
不是我不想做,是一看到学生表就吐
winter13292 2010-06-30
  • 打赏
  • 举报
回复
create trigger 学分积查询
on 选课表
for insert,update,delete
as
begin
if (update (成绩))
update 学分积表
set 学分积=(select sum((成绩-50)/10*课程学分) from 成绩
inner join 课程表 on 成绩.课程编号=课程表.课程编号 group by 学号)
where 成绩.学号 = 学分积表.学号

end
go

这是我做的个 但是没成功 成绩是我做的个 视图
CREATE view 成绩 as select 姓名,学生表.学号,成绩,课程编号,所属系编号 from 选课表 inner join 学生表 on 学生表.学号=选课表.学号
inner join 班级表 on 班级表.班级编号=学生表.班级编号
冰岛男孩 2010-06-30
  • 打赏
  • 举报
回复
当然了 我理解了整个查询 的 马上给你啊 呵呵
winter13292 2010-06-30
  • 打赏
  • 举报
回复
当然了 我理解了整个查询 的 马上给你啊 呵呵
Sharon_liu 2010-06-30
  • 打赏
  • 举报
回复
多给点分吧,我严重缺分
winter13292 2010-06-30
  • 打赏
  • 举报
回复
多谢大家 对小第的帮助 首当其冲的 当然是Sharon_liu
xiaoliaoyun 2010-06-30
  • 打赏
  • 举报
回复

CREATE TRIGGER 学分积查询 ON 选课表
FOR INSERT
AS
BEGIN
IF (UPDATE (成绩))

UPDATE 学分积表
SET 学分积表.学分积= B.学分积
FROM ( SELECT 选课表.学号,SUM((选课表.成绩-50)/10*课程表.课程学分)AS 学分积
FROM 选课表
INNER JOIN 课程表 ON 选课表.课程编号 = 课程表.课程编号
INNER JOIN 学生表 ON 学生表.学号=选课表.学号
GROUP BY 选课表.学号) B
WHERE 学分积表.学号 = B.学号

END
小坏猪猪 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 winter13292 的回复:]
弱弱的问下 t1 T4是什么
[/Quote]
是表的别名
winter13292 2010-06-30
  • 打赏
  • 举报
回复
不好意思哦 就当我是小白
Sharon_liu 2010-06-30
  • 打赏
  • 举报
回复
别名。。。。
winter13292 2010-06-30
  • 打赏
  • 举报
回复
弱弱的问下 t1 T4是什么
veritasfx 2010-06-30
  • 打赏
  • 举报
回复
干吗恶心呢?生活那么美好。
我也不会做触发器,可又想做。
MS SQL Management Studio 做这个好像不行,只能用语句?
第二个问题,好像触发器是跟database engine走,没有跟我的database在一起?
因为我做了一个,不知道哪里去了。。。要查询系统table才知道有没有,这的确不好玩。
我搬迁db的时候,trigger岂不是不能自动?
Sharon_liu 2010-06-30
  • 打赏
  • 举报
回复
先用我第二段的SELECT语句检查一下学号对应的分数对不对,如果对的话触发器就应该没问题。
winter13292 2010-06-30
  • 打赏
  • 举报
回复
正在 研究
Sharon_liu 2010-06-30
  • 打赏
  • 举报
回复
--修改视图
ALTER view 成绩 as
select 姓名,学生表.学号,成绩,T4.课程编号,所属系编号 ,T4.课程学分
from 选课表
inner join 学生表 on 学生表.学号=选课表.学号
inner join 班级表 on 班级表.班级编号=学生表.班级编号
INNER JOIN 课程表 T4 ON T4.课程编号=选课表.课程编号
--用这个语句验证学号对应的学分积是否正确
SELECT T1.学号 ,sum((成绩-50)/10*ISNULL(课程学分,0)) 'SCORE'
FROM 学分积表 T1
INNER JOIN 成绩 T2 ON T1.学号=T2.学号
GROUP BY T1.学号
--触发器
CREATE TRIGGER 学分积查询
ON 选课表
for insert,update,delete
as
begin
if (update (成绩))
UPDATE T1 SET T1.学分积=T2.SCORE
FROM 学分积表 T1
INNER JOIN (
SELECT T1.学号 ,sum((成绩-50)/10*ISNULL(课程学分,0)) 'SCORE'
FROM 学分积表 T1
INNER JOIN 成绩 T2 ON T1.学号=T2.学号 AND T1.学号 IN (SELECT 学号 FROM INSERTED)
GROUP BY T1.学号
) T2 ON T1.学号=T2.学号
END
winter13292 2010-06-30
  • 打赏
  • 举报
回复
麻烦你了 呵呵
winter13292 2010-06-30
  • 打赏
  • 举报
回复
insert 课程表(课程编号,课程名称,课程学分,课程属性) values('04010101 ','数据库','4',’必修’)
insert 课程表(课程编号,课程名称,课程学分,课程属性) values('04010102 ','数据库','4',’必修’)
insert 课程表(课程编号,课程名称,课程学分,课程属性) values('04010103 ','计算机原理','3',’必修’)
insert 课程表(课程编号,课程名称,课程学分,课程属性) values('04010104 ','数据结构','4',’选修’)
Sharon_liu 2010-06-30
  • 打赏
  • 举报
回复
没有课程表的插入语句
加载更多回复(4)

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧