、为“成绩管理”数据库中的tscore表设置触发器,限制“数据库”课程选课人数不超过3人,若选满,则提示“对不起,已选满!”;编写测试语句进行测试。用sql sever 语言
时间: 2024-12-24 21:40:24 浏览: 5
在SQL Server中,你可以创建一个DDL (Data Definition Language) 触发器来实现这个需求。首先,我们需要创建一个名为`tscore`的表(如果还没有的话),假设它有`student_id`和`course_id`两个字段,表示学生和课程的关系。然后,我们可以创建一个INSERT触发器来检查是否达到最大选课人数。
```sql
CREATE TABLE tscore (
student_id INT,
course_id INT,
CONSTRAINT PK_tscore PRIMARY KEY (student_id, course_id)
);
CREATE TRIGGER trg_max_students_per_course
ON tscore
AFTER INSERT AS
BEGIN
DECLARE @maxStudents INT = 3;
DECLARE @newStudentCount INT = (SELECT COUNT(*) FROM inserted);
IF (@newStudentCount > @maxStudents)
BEGIN
PRINT '对不起,已选满!';
ROLLBACK TRANSACTION; -- 如果超过上限,回滚插入操作
END
END;
```
这个触发器会在`tscore`表插入新记录后运行,检查新插入的学生总数是否超过3人。如果是,它会打印一条消息并回滚事务,阻止继续插入新的学生。
接下来,我们编写几个测试语句:
```sql
-- 测试正常情况,未达到上限
INSERT INTO tscore (student_id, course_id) VALUES (1, 1);
INSERT INTO tscore (student_id, course_id) VALUES (2, 1);
INSERT INTO tscore (student_id, course_id) VALUES (3, 1); -- 应该不会触发错误
-- 测试达到上限的情况
INSERT INTO tscore (student_id, course_id) VALUES (4, 1); -- 预期会触发错误并显示已选满
```
阅读全文