【发布时间】:2013-02-16 04:37:12
【问题描述】:
在 SQL Server 数据库中有两个表。表 #1 ClassicsRatings 具有 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”似乎 AVG(Rating) 的 AvgRating 部分在 AVGRating 表中为 AvgRating未被触发器识别(初始查询确实识别 AvgRating)。我认为这意味着由于 ClassicsRatings 实际上没有 AvgRating 而是进行计算/聚合并使用计算填充 AVGRating 表,因此正在发生冲突。我已经尝试了两天来让它工作。我的问题似乎出在 A.Count = I.Count A.AvgRating = I.AvgRating 因为 ClassicsRatings 表中的 Count 实际上是 COUNT(*) - 不是 ClassicsRatings 中的字段,而 AvgRating 真的是 AVG(Rating) - 不是ClassicsRatings 中的一个字段。任何帮助将不胜感激。
【问题讨论】:
标签: sql-server-2008