SQL SERVER-限制教师授课超过3个班级的触发器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL SERVER-限制教师授课超过3个班级的触发器相关的知识,希望对你有一定的参考价值。

我是SQL的初学者,需要帮助来设置触发器! (我认为它称为插入触发器)

我需要设置一个触发器,以便如果一位导师拥有3个以上的时间表ID,则不允许这样做!!(每个导师最多只能开设3个课程)

表格

TutorID/ScheduleID/Student
1       1           Tom 
1       1           Harry   
1       1           Lima    
1       2           Zany    
1       2           Logan   
1       3           Zoe
1       3           Lana

老师ID /老师姓名1山姆

ScheduleID /ScheduleDate
1           17/04/20
2           18/04/20
3           19/04/20
4           20/04/20

Sam在多个日期教授3个课程-如何限制某人插入另一个课程?

答案

免责声明:坦白说,我不认为通过SQL触发器来做到这一点是最好的解决方案,最好是通过您的业务层来控制这种事情。

那是说您可以使用触发器来防止插入:

CREATE TRIGGER MyTrigger ON dbo.ClassTable
AFTER INSERT
AS

IF EXISTS (SELECT TutorId, COUNT(ScheduleId) 
           FROM db.ClassTable
           GROUP BY TutorID
           HAVING COUNT(ScheduleId) > 3)
BEGIN
    ROLLBACK
    RAISERROR ('Too many classes scheduled!', 16, 1);
END
GO

或者,如果您愿意,您可以执行INSTEAD OF触发器,而只是静静地丢弃讨厌的多余行:)

CREATE OR ALTER TRIGGER MyTrigger ON dbo.ClassTable
INSTEAD OF INSERT
 AS
    BEGIN
    SET NOCOUNT ON;
    INSERT dbo.ClassTable(TutorId, ScheduleId, Student)
        SELECT TutorId, ScheduleId, Student
        FROM inserted
        WHERE TutorId IN (SELECT TutorId, COUNT(ScheduleId) FROM db.ClassTable WHERE COUNT(ScheduleId) < 3 GROUP BY TutorID);
    END
GO

以上是关于SQL SERVER-限制教师授课超过3个班级的触发器的主要内容,如果未能解决你的问题,请参考以下文章

用数据库做一个简单的实验室安排系统

贪玩巴斯数字图像处理基础课堂笔记——序言「授课教师:尚振宏」2021.09.14

《C语言》22-23第一学期后十周教学计划(谭浩强第五版)

《C语言》22-23第一学期后十周教学计划(谭浩强第五版)

SQL语句查询所有基本工资小于2000的教师的姓名和单项工资.

深圳-香港专业人才协会有限公司-STEAM教师(机器人设计方向)