5. 利用Transact-SQL语句创建一个AFTER触发器trigkcno,当向成绩表中插入或修改数据时,如果该学生选课门数低于4门,且该生已选课程的平均分在60以上才符合要求,否则回滚事务。若该触发器已存在,则删除后重建。
时间: 2023-11-28 17:03:56 浏览: 69
以下是创建AFTER触发器trigkcno的Transact-SQL语句:
```
IF OBJECT_ID('trigkcno', 'TR') IS NOT NULL
DROP TRIGGER trigkcno;
GO
CREATE TRIGGER trigkcno
ON 成绩表
AFTER INSERT, UPDATE
AS
BEGIN
IF (SELECT COUNT(*) FROM inserted WHERE 学生号 = 成绩表.学生号) < 4
AND (SELECT AVG(成绩) FROM 成绩表 WHERE 学生号 = inserted.学生号) < 60
BEGIN
RAISERROR('该学生选课门数低于4门,且该生已选课程的平均分在60以上才符合要求。', 16, 1);
ROLLBACK TRANSACTION;
END
END;
GO
```
首先,使用IF语句检查trigkcno触发器是否已存在,如果存在则先删除。然后,创建一个名为trigkcno的触发器,它将在INSERT或UPDATE操作后触发。
在触发器的主体中,使用SELECT语句从插入的数据中获取学生号,并检查该学生选择的课程数量是否小于4门,以及该学生的平均成绩是否低于60分。如果不符合要求,则使用RAISERROR函数抛出一个错误消息并回滚事务,否则触发器不会执行任何操作。
最后,使用GO语句分隔每个语句,并结束创建过程。
阅读全文