我有一个Project表:
和里程碑表:
每当对Milestone表进行任何插入,更新,删除时,Project表都需要更新。
Project表中的ProjectCost列是其里程碑的总和。 Milestone表具有ProjectId列,用于指示哪个项目属于里程碑。
每次对里程碑表进行任何更改时,都应更新Product表中的ProductCost。
我在触发器中遇到问题:
CREATE TRIGGER UpdateProject
ON [Organisation].[dbo].[Milestone]
AFTER INSERT,DELETE,UPDATE
AS
BEGIN
UPDATE T1
SET T1.ProjectCost = (SELECT SUM(MilestoneCost) FROM [Organisation].[dbo].[Milestone] T2
WHERE T2.ProjectId=)
FROM [Organisation].[dbo].[Project] T1
INNER JOIN Inserted i ON T1.ProjectId=i.ProjectId
WHERE T1.ProjectId=
END
GO
触发器应该如何?
修改
我将触发器编辑为:
USE Organisation
GO
CREATE TRIGGER [UpdateProject]
ON [Organisation].[dbo].[Milestone]
AFTER INSERT,DELETE,UPDATE
AS
BEGIN
UPDATE T1
SET T1.ProjectCost = (SELECT SUM(MilestoneCost)
FROM [Organisation].[dbo].[Milestone] T2
WHERE T2.ProjectId=i.ProjectId)
FROM [Organisation].[dbo].[Project] T1
INNER JOIN Inserted i ON T1.ProjectId=i.ProjectId
END
GO
答案 0 :(得分:1)
你非常接近:
BEGIN
UPDATE T1
SET T1.ProjectCost = (SELECT SUM(MilestoneCost)
FROM [Organisation].[dbo].[Milestone] T2
WHERE T2.ProjectId = i.ProjectId
)
FROM [Organisation].[dbo].[Project] T1 INNER JOIN
Inserted i
ON T1.ProjectId = i.ProjectId;
END;
外部查询中的join
和where
中的相关性会执行您想要的过滤。