SQL SERVER-触发以限制3条以上记录

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

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

我需要设置一个触发器,以便如果一位导师拥有3个以上的时间表ID,则这是不允许的!!

表格

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

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

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.