用SQL server students表和course表创建一个触发器,要求要有完整的业务处理流程至少20行代码
时间: 2024-12-28 21:32:08 浏览: 15
在SQL Server中,创建触发器是为了自动执行某些操作,例如当数据在学生表(students)或课程表(courses)上发生变化时。下面是一个示例,展示如何创建一个简单的触发器,当有新的学生注册一门新课程时,更新两个表的相关信息:
首先,假设我们有两个表:
- students (student_id, student_name, enrolled_courses)
- courses (course_id, course_name)
我们需要创建一个触发器,每当在`courses`表插入一条新记录时,检查这门课是否已经在学生的已选课程列表中,并相应地更新。
```sql
CREATE TRIGGER trg_EnrollCourse ON courses
AFTER INSERT
AS
BEGIN
DECLARE @course_id INT = inserted.course_id;
DECLARE @course_name NVARCHAR(50) = inserted.course_name;
-- 获取新课程的所有学生
DECLARE @students CURSOR FOR
SELECT s.student_id FROM students s
WHERE NOT EXISTS (SELECT * FROM inserted c INNER JOIN s.enrolled_courses ec ON c.course_id = ec.course_id);
OPEN @students;
FETCH NEXT FROM @students INTO @student_id;
WHILE @@FETCH_STATUS = 0
BEGIN
-- 如果找到学生,添加到已选课程列表
INSERT INTO students.enrolled_courses (student_id, course_id)
VALUES (@student_id, @course_id);
PRINT 'Student with ID ' + CAST(@student_id AS VARCHAR) + ' has been enrolled in ' + @course_name;
FETCH NEXT FROM @students INTO @student_id;
END
CLOSE @students;
DEALLOCATE @students;
END;
GO
```
这个触发器会在`courses`表中插入新课程之后运行。如果某学生尚未选择此课程,触发器会将学生ID添加到`enrolled_courses`子表中,并打印确认消息。
阅读全文