我发现了一个新问题:我有两个表Classes和Students。学生通过[ClassID]列引用班级。类有名为[Count]的列,它存储引用学生的计数,我正在尝试通过学生表上的AFTER INSERT,DELETE触发器更新它。我写了一个简单的CALC_COUNT程序,如下所示:
CREATE PROCEDURE [dbo].[CALC_COUNT]
@classid INT
AS
BEGIN
UPDATE classes SET [Count] = (SELECT COUNT(Id) FROM students WHERE [ClassID] = @classid);
END
RETURN 0
并在触发器内使用它
CREATE TRIGGER [MONITOR_STUDENTS_SCHEMA_TRIGGER]
ON [dbo].[students]
AFTER DELETE, INSERT
AS
BEGIN
UPDATE [dbo].[classes]
SET studentsschemarev +=1 FROM inserted;
CALC_COUNT(SELECT [ClassID] FROM inserted UNION SELECT [ClassID] FROM deleted);
UPDATE [dbo].[stats] SET students_schema_rev += 1;
END
但它不起作用。我想,我需要一种方法来为触发器的 SELECT 语句中的每一行执行过程,但我不知道如何。
SQL Server 2012 LocalDB,与 SQL Server 2008 的兼容模式。