sql server 编写触发器TR-4:实现学生自动分组 当向学生表中插入记录时,根据其学号最后一位,将之分入相应的组别(组别Zno=学号最后一位)。在此之前,先建立一张分组表,fenzhu(Sno nvarchar(9),Zno int)
时间: 2024-02-01 21:12:27 浏览: 71
CREATE TRIGGER tr_student_group
ON student
AFTER INSERT
AS
BEGIN
INSERT INTO fenzhu(Sno,Zno)
SELECT Sno, CAST(RIGHT(Sno,1) AS INT) AS Zno
FROM inserted
END
这个触发器会在向学生表中插入记录后自动执行,将学生对应的学号和组别插入到分组表中。其中,使用了RIGHT函数获取学号的最后一位,并使用CAST函数将其转换为整数类型。同时,使用了inserted表来获取插入的数据。
相关问题
sql server 编写触发器TR-5:分组数据更新 当删除学生数据时,删除分组表内相应的学生记录 创建完成后,删除学号为‘201215129’的记录
触发器 TR-5 的实现如下:
```sql
CREATE TRIGGER TR-5
ON dbo.Student
AFTER DELETE
AS
BEGIN
-- 删除分组表内相应的学生记录
DELETE FROM dbo.Grouping
WHERE StudentId IN (SELECT deleted.StudentId FROM deleted)
-- 删除学号为‘201215129’的记录
DELETE FROM dbo.Student
WHERE StudentId = '201215129'
END
```
该触发器会在删除学生表中的记录后触发,首先会删除分组表内与被删除学生相关的记录,然后再删除学号为‘201215129’的记录。其中,使用了 `deleted` 表来获取被删除的学生记录。
SQLserver 建立Student(学号,年龄,性别,系名) Course(课号,课名,学分,学时) SC(学号,课号,成绩)表 1.建立学生表的insert触发器,若向学生表中插入一条记录,则自动向选课表中插入一行,令该生选一门选修人数最多的课。 2.在建立学生表的delete触发器,若选课表中该生有选课记录,则拒绝删除,要求在删除学生信息同时,将相关表中的信息全部删除。
对于第一个问题,你可以使用以下代码创建一个触发器来实现自动向选课表中插入一行:
```
CREATE TRIGGER tr_insert_student
ON Student
AFTER INSERT
AS
BEGIN
DECLARE @max_course_id INT
SELECT @max_course_id = TOP 1 Course.课号, COUNT(SC.学号) AS 选修人数
FROM Course
LEFT JOIN SC ON Course.课号 = SC.课号
GROUP BY Course.课号
ORDER BY 选修人数 DESC
INSERT INTO SC (学号, 课号, 成绩) VALUES (INSERTED.学号, @max_course_id, NULL)
END
```
这个触发器会在向学生表中插入一条记录时被激活。它会查询选课表中每门课的选修人数,并选择选修人数最多的那门课的课号。然后,它会向选课表中插入一行,将该生的学号和选择的课号插入,并将成绩设置为 NULL。
对于第二个问题,你可以使用以下代码创建一个触发器来实现在删除学生信息时将相关表中的信息全部删除:
```
CREATE TRIGGER tr_delete_student
ON Student
INSTEAD OF DELETE
AS
BEGIN
DELETE FROM SC WHERE 学号 IN (SELECT 学号 FROM DELETED)
DELETE FROM Student WHERE 学号 IN (SELECT 学号 FROM DELETED)
END
```
这个触发器会在删除学生信息时被激活。它会先从选课表中删除该生的所有选课记录,然后再从学生表中删除该生的记录。如果选课表中没有该生的选课记录,则直接从学生表中删除该生的记录。
阅读全文