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
我是 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