SQL SERVER - триггер для ограничения более 3 записей - PullRequest
0 голосов
/ 17 апреля 2020

Я новичок в SQL и мне нужна помощь в настройке триггера

Мне нужно установить триггер так, чтобы, если у одного репетитора было более 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

Идентификатор преподавателя / Имя преподавателя 1 Сэм

как я могу запретить кому-либо вставлять другой класс?

1 Ответ

0 голосов
/ 17 апреля 2020

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Честно говоря, я не убежден, что делать это с помощью 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
...