SQL 服务器 - 限制超过 3 条记录的触发器

SQL SERVER - Trigger to restrict over 3 records

我是 SQL 的初学者,需要帮助来设置触发器

我需要设置一个触发器,这样如果 1 位导师有超过 3 个不同的日程 ID,这是不允许的!!

Table

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 山姆

如何限制某人插入另一个 class?

免责声明:老实说,我不相信通过 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