用sqlserver写一个保证学生不能选修重复的课程,用触发器实现的代码
时间: 2024-05-11 17:16:40 浏览: 236
以下是一个简单的 SQL Server 触发器,它可以保证学生不能重复选修同一门课程:
```
CREATE TRIGGER tr_student_course
ON student_course
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS (
SELECT 1 FROM inserted i
WHERE EXISTS (
SELECT 1 FROM student_course
WHERE student_id = i.student_id
AND course_id = i.course_id
)
) BEGIN
RAISERROR('This student has already taken this course.', 16, 1);
ROLLBACK TRANSACTION;
RETURN;
END
INSERT INTO student_course (student_id, course_id)
SELECT student_id, course_id FROM inserted;
END
```
这个触发器会在 `student_course` 表中插入记录之前检查这个学生是否已经选修了这门课程。如果已经选修了,就会抛出一个错误并撤销整个事务,否则就会继续插入记录。注意,这个触发器是 `INSTEAD OF INSERT` 触发器,因此它完全替代了默认的插入行为。如果你想要在插入完成后再检查重复性,可以改成 `AFTER INSERT` 触发器。
阅读全文