在 SQL Server 数据库中有两个表。表 #1ClassicsRatings
有RatingID
, 作为键, TitleID
,Rating
和Comment
. 表 #2, AVGRating
, 有TitleID
, 作为键, AvgRating
, 和Count
.
当查询最初在表 #1 上运行时,以下查询会更新表 #2:
INSERT INTO AVGRating
SELECT TitleID, Count(*) AS Count, AVG(Rating) AS AvgRating
FROM ClassicsRatings
GROUP BY TitleID
ORDER BY TitleID
我的问题是:如何在随后的 INSERTS 进入表 #1 时更新表 #2。我已经尝试过MERGE
,UPDATE
如下所示:
MERGE AVGRating AS AR
USING ( SELECT TitleID, COUNT(*) AS Count, AVG(Rating) AS AvgRating
FROM ClassicsRatings
GROUP BY RecipeID) AS ClassicsRatings(RecipeID, Count, AvgRating)
ON
(
AR.RecipeID = ClassicsRatings.RecipeID
)
WHEN NOT MATCHED THEN
INSERT (RecipeID, Count, AvgRating)
VALUES (ClassicsRatings.RecipeID, ClassicsRatings.Count, ClassicsRatings.AvgRating)
WHEN MATCHED THEN
UPDATE
SET AR.Count = ClassicsRatings.Count,
AR.AvgARating = ClassicsRatings.AvgRating;
UPDATE AVGRating
SET
AVGRating.TitleID = ClassicsRatings.TitleID,
AVGRating.AvgRating = ClassicsRatings.AvgRating,
AVGRating.Count = ClassicsRatings.Count
FROM AVGRating
INNER JOIN ClassicsRatings ON
AVGRating.TitleID = ClassicsRatings.TitleID
WHERE TitleID = TitleID
我无法做到的是插入表 1 并让表 2 反映该插入。任何帮助,将不胜感激。
我还使用了以下 TRIGGER 但没有结果:
CREATE TRIGGER AVGRatingTrigger
ON ClassicsRatings
AFTER INSERT AS
DECLARE @TitleID INT
DECLARE @Count INT
DECLARE @RatingAVG INT
BEGIN
UPDATE AVGRatings
WHERE AVGRatings.TitleID = ClassicsRatings.TitleID
END
触发器更改为:
CREATE TRIGGER AVGRatingTrigger
ON ClassicsRatings
AFTER INSERT AS
BEGIN
UPDATE A
SET A.TitleID = I.TitleID,
A.Count = I.Count,
A.AvgRating = I.AvgRating
FROM AVGRating as A
INNER JOIN INSERTED as I ON A.TitelID = I.TitleID
END
我没有收到有关触发器的错误消息,但是,当我在 ClassicRatings 中插入新评级时,我收到错误消息“无效对象 AvgRating”似乎 AVGRating 表中的 AVG(Rating) AS AvgRating 的 AvgRating 部分不是由触发器识别(初始查询确实识别 AvgRating)。我认为这意味着由于 ClassicsRatings 实际上没有 AvgRating 而是进行计算/聚合并用计算填充 AVGRating 表,因此正在发生冲突。我已经尝试了两天来让它工作。我的问题似乎出在 A.Count = I.Count A.AvgRating = I.AvgRating 因为 ClassicsRatings 表中的 Count 实际上是 COUNT(*) - 不是 ClassicsRatings 中的字段,而 AvgRating 真的是 AVG(Rating) - 不是ClassicsRatings 中的一个字段。