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