在SQL Server數據庫中有兩個表。表#1 ClassicsRatings
具有RatingID
,作爲密鑰,TitleID
,Rating
和Comment
。表#2,AVGRating
,具有TitleID
,作爲關鍵,AvgRating
和Count
。SQL Server表1更新表2
下面的查詢更新表#2時查詢最初的表#1運行:
INSERT INTO AVGRating
SELECT TitleID, Count(*) AS Count, AVG(Rating) AS AvgRating
FROM ClassicsRatings
GROUP BY TitleID
ORDER BY TitleID
我的問題是:如何讓表#2更新時,後續插入被製成表#1 。我曾嘗試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反映INSERT。任何幫助,將不勝感激。
我還使用了下面的觸發器沒有結果:
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中,我收到錯誤消息「Invalid object 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中的一個字段。任何幫助將不勝感激。
謝謝你的迴應。請參閱我對我的初始帖子的編輯。謝謝。 – user1830924 2013-02-12 19:02:07
非常感謝Petar。我想我可以從這裏得到它。 – user1830924 2013-02-12 20:28:54
Petar,我錯了,我無法得到它。如果你願意看看我上面所做的編輯,如果你能理解我的編輯,我將不勝感激任何幫助。非常感謝你。 – user1830924 2013-02-15 20:31:53