利用Transact-SQL语句实现学生考试结束录入成绩后,要能够根据成绩及时将学生新获取的课程的学分累计上去,获取学分的条件是考试成绩不低于60分;而当成绩被修改时,要能够根据所做修改更新学分;若某学生某门课的成绩取消,要能够同时取消这门课所获得的学分
时间: 2024-01-01 15:06:22 浏览: 20
假设有两张表,一张是学生表(student),包含学生的基本信息,另一张是成绩表(score),包含学生的成绩信息。
在学生表中,我们需要增加一个字段用来保存学生的学分(credit)。
在成绩表中,我们需要增加一个触发器(trigger),用来在成绩被插入、更新或删除时自动更新学生的学分。
以下是示例代码:
```
-- 创建学生表
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(50),
credit INT DEFAULT 0 -- 初始学分为0
);
-- 创建成绩表
CREATE TABLE score (
id INT PRIMARY KEY,
student_id INT,
course_name VARCHAR(50),
score INT,
CONSTRAINT fk_student FOREIGN KEY (student_id) REFERENCES student(id)
);
-- 创建触发器,用来更新学生的学分
CREATE TRIGGER update_credit
ON score
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
-- 更新成绩对应的学生的学分
IF EXISTS (SELECT * FROM inserted WHERE score >= 60)
BEGIN
UPDATE student
SET credit = credit + 1
WHERE id = (SELECT student_id FROM inserted);
END;
-- 更新被修改的成绩对应的学生的学分
IF EXISTS (SELECT * FROM deleted WHERE score >= 60) OR EXISTS (SELECT * FROM inserted WHERE score >= 60)
BEGIN
UPDATE student
SET credit = credit - 1
WHERE id = (SELECT student_id FROM deleted UNION SELECT student_id FROM inserted);
END;
-- 取消成绩对应的学生的学分
IF EXISTS (SELECT * FROM deleted WHERE score >= 60)
BEGIN
UPDATE student
SET credit = credit - 1
WHERE id = (SELECT student_id FROM deleted);
END;
END;
```
这个触发器会在成绩表中插入、更新、删除操作时触发,根据成绩是否达到60分来更新学生的学分。如果成绩被修改,会同时更新被修改前后的学生的学分。如果成绩被取消,会取消对应学生的学分。