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

问题描述 投票:0回答:1

我是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 sql-server triggers sql-insert restrict
1个回答
0
投票

免责声明:坦白说,我不认为通过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
© www.soinside.com 2019 - 2024. All rights reserved.