数据库触发器自动更新总评成绩
5星 · 超过95%的资源 183 浏览量
更新于2024-09-04
收藏 50KB PDF 举报
本文主要介绍了如何在数据库中使用触发器来实现特定的业务逻辑控制,具体涉及两个场景:一是更新选修成绩表SCTS中学生的平时成绩或考试成绩时自动计算总评成绩;二是防止学生在一个学期中选修超过20学分的课程。
在第一个知识点中,数据库触发器被用来自动化维护学生选修课程的总评成绩。当表SCTS中的`regular_grade`(平时成绩)或`exam_grade`(考试成绩)字段被更新时,触发器`Tri_UPDATE_SCTS`会自动执行。这个触发器首先检查是否有`regular_grade`或`exam_grade`字段发生了变化,如果发生了变化,则会获取新值并计算出`total_mark`(总评成绩)。计算公式为:`total_mark = regular_grade * 30% + exam_grade * 70%`。然后,触发器将更新后的总评成绩写回至SCTS表中相应的位置。
触发器的代码如下:
```sql
Create trigger Tri_UPDATE_SCTS
on SCTS
after UPDATE
AS
BEGIN
IF UPDATE(regular_grade) OR UPDATE(exam_grade)
BEGIN
DECLARE @rgrade FLOAT;
DECLARE @egrade FLOAT;
SELECT @rgrade = regular_grade, @egrade = exam_grade FROM inserted;
UPDATE SCTS
SET total_mark = 0.3 * @rgrade + 0.7 * @egrade
FROM inserted
WHERE SCTS.studentid = inserted.studentid
AND SCTS.courseid = inserted.courseid
AND SCTS.teacherid = inserted.teacherid;
END
END
```
测试这个触发器,可以通过更新学生的平时成绩和考试成绩,然后查询SCTS表验证总评成绩是否已自动更新。
第二个知识点涉及限制学生选课的总学分。触发器`Tri_IN_LIMIT_SCTS`会在数据插入到SCTS表后触发,用于检查新选修的课程是否会使得学生的总学分超过20学分。如果超过,系统将显示警告信息。触发器的代码如下:
```sql
Create trigger Tri_IN_LIMIT_SCTS
on SCTS
after INSERT
AS
BEGIN
DECLARE @allcredit FLOAT;
DECLARE @sid VARCHAR(10);
SELECT @allcredit = SUM(credit), @sid = studentid FROM inserted GROUP BY studentid;
IF (@allcredit > 20)
BEGIN
PRINT '你选修的总学分已经达到最大值,不允许继续选课!';
END
END
```
通过这个触发器,当尝试为学生增加新的选修记录时,系统会检查该学生在当前学期的累计学分,并在超过20学分时给出提示,从而避免了超限选课的情况。
以上两个触发器实例展示了数据库触发器在实际应用中的功能,它们可以确保数据的完整性和业务规则的执行,即使在用户直接操作数据时也能保持系统的正确性。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2011-12-29 上传
2012-02-11 上传
2013-10-23 上传
2011-04-13 上传
2010-04-20 上传
2010-12-16 上传
weixin_38663544
- 粉丝: 4
- 资源: 969
最新资源
- ubuntu从入门到精通--请您把一块硬盘想象为一本书……即便您不喜欢读书,您也一定非
- 基于单片机的电子密码锁
- 多功能数字抢答器(数字电路)
- SOA Using Java Web Services.pdf
- IT面试 技巧 大全
- SQL考试资料/微软认证
- clementine教程 与实例应用方面的讲解
- excel VBA 编程指南
- C ++程序设计语言——详解源码
- Expert one on one Oracle
- MATLAB命令大全
- sun-jsp-2.0.pdf
- 最小生成树PRIM算法
- KRUSKAL算法(排序有问题饿)
- THE MYTHICAL MAN-MONTH 人月神话
- EDA综合设计的典型三个实例