数据库触发器自动更新总评成绩

5星 · 超过95%的资源 1 下载量 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学分时给出提示,从而避免了超限选课的情况。 以上两个触发器实例展示了数据库触发器在实际应用中的功能,它们可以确保数据的完整性和业务规则的执行,即使在用户直接操作数据时也能保持系统的正确性。