我想添加让我们说另一个学生上课。
基本上我有两个表:Students
和Classes
。
当我将具有该班级ID的学生添加到Students
表格时,我希望触发器为学生计数添加+1。
CREATE TRIGGER updatestudentcount
ON ENROLLED
AFTER INSERT
AS
BEGIN
UPDATE Classes
SET enrolled_students = (enrolled_students + 1)
WHERE class_id = old.class_id;
END
但是Old.Class_id
不起作用。
非常感谢任何帮助或提示。
干杯!
答案 0 :(得分:0)
你几乎得到了它。这不起作用,因为old
(但我认为它应该是inserted
,因为我记得)是一行而不是一个变量对象。
所以:
declare @class_id int --- I presume
select @class_id = class_id from old
UPDATE Classes SET enrolled_students = (enrolled_students + 1) where class_id = @class_id;
但是如果在插入之前还有其他删除操作。那你的计数就错了。
或者如果插入是insert into .. select from
:
insert into students select * from #x
因此,如果您想跟踪正确的计数,应该这样做:
CREATE TRIGGER updatestudentcount
ON ENROLLED
AFTER INSERT , DELETE
Update e
set e.enrolled_students = b.enrolled_students
from Classes e join (
select class_id, count(1) as enrolled_students
from ENROLLED
group by class_id
) b
on a.class_id = b.class_id
if exists(select top 1 from Classes where enrolled_students > 5)
begin
print 'maximum reached'
end
P / s:请记住,我还没有测试过这些代码,可能需要进行一些修改,但一般来说,我认为这是正确的方法。
答案 1 :(得分:0)
试试这个
CREATE TRIGGER updatestudentcount
ON ENROLLED
AFTER INSERT
AS
BEGIN
UPDATE Classes
SET enrolled_students = (enrolled_students + 1)
WHERE class_id IN (SELECT class_id FROM INSERTED);
END