创建触发器T_2,功能是当向班级表添加、修改和删除数据时,显示学生的信息。 创建触发器T_3,功能是当修改班级表里的班号时,同步更新学生表中对应的 创建触发器T_4,功能是当删除学生表的记录时,司步删除选课表中的选课
时间: 2024-11-15 21:31:32 浏览: 50
学生成绩管理系统数据库设计.doc
5星 · 资源好评率100%
创建触发器T_2 (监控班级数据变化并显示学生信息):
```sql
CREATE TRIGGER T_2
ON 班级
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
IF EXISTS(SELECT * FROM inserted) -- 插入操作
BEGIN
DECLARE @classChangeInfo NVARCHAR(MAX);
SET @classChangeInfo = N'班级表数据变化如下:\n' +
N'新增/修改: 班号: ' + inserted.班号 + N', 班名: ' + inserted.班名 + N', 班主任: ' + inserted.班主任;
PRINT @classChangeInfo;
-- 如果有对应的学生,展示学生信息
IF EXISTS(SELECT * FROM 学生 s WHERE s.班号 = inserted.班号)
BEGIN
SELECT '受影响的学生:'
+ N'\n学号, 姓名, 性别'
FROM 学生
WHERE 班号 = inserted.班号;
END
END
IF EXISTS(SELECT * FROM deleted) -- 删除操作
BEGIN
DECLARE @deletedClassInfo NVARCHAR(MAX);
SET @deletedClassInfo = N'班级表数据已删除: 班号: ' + deleted.班号 + N', 班名: ' + deleted.班名;
PRINT @deletedClassInfo;
END
END;
```
创建触发器T_3 (修改班级数据时同步学生表):
```sql
CREATE TRIGGER T_3
ON 班级
AFTER UPDATE
AS
BEGIN
IF EXISTS (SELECT * FROM deleted WHERE column_name = '班号')
BEGIN
UPDATE 学生
SET 班号 = (
SELECT NEW.班号 FROM inserted AS NEW
INNER JOIN deleted AS OLD ON NEW.班号 = OLD.班号
)
WHERE 学生.班号 IN (SELECT Old.班号 FROM inserted AS NEW INNER JOIN deleted AS OLD ON NEW.班号 = OLD.班号);
END
END;
```
创建触发器T_4 (删除学生时同步删除选课记录):
```sql
CREATE TRIGGER T_4
ON 学生
AFTER DELETE
AS
BEGIN
DELETE FROM 选课
WHERE 学号 IN (SELECT deleted.学号 FROM deleted);
END;
```
现在这三个触发器已经创建好,分别负责在班级表操作后显示相关信息、同步学生表中的数据以及维护选课表的完整性。
阅读全文