在触发器中将列增加1?

时间:2017-12-06 23:57:23

标签: sql sql-server triggers

我想添加让我们说另一个学生上课。

基本上我有两个表:StudentsClasses

当我将具有该班级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不起作用。

非常感谢任何帮助或提示。

干杯!

2 个答案:

答案 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