爲了更容易理解,我將呈現完全相同的問題,就好像它是關於論壇一樣(實際應用程序與論壇無關所有,但我認爲這樣的並行對我們大多數人來說更容易掌握,實際的應用程序是關於大多數程序員不會理解的非常具體的東西(它是針對硬核圖形設計者的應用程序))。MS SQL Server觸發器更新項目評分和票數
讓我們假設有一個線程表存儲有關每個論壇線程和一個存儲每個用戶(1-5)的線程評級的線程表的信息。爲了提高效率,我決定緩存線程表中的評分平均值和投票數,觸發器聽起來像是更新它的好主意(我曾經在實際的應用程序代碼中做過這樣的事情,但我認爲觸發器值得一試,儘管調試危險)。如您所知,MS SQL Server不支持每行要執行的觸發器,它必須是每個語句。所以我試圖用這種方式來定義它:
CREATE TRIGGER thread_rating ON threadrating
AFTER INSERT
AS
UPDATE thread
SET
thread.rating = (thread.rating * thread.voters + SUM(inserted.rating))/(thread.voters + COUNT(inserted.rating)),
thread.voters = thread.voters + COUNT(inserted.rating)
FROM thread
INNER JOIN inserted ON(inserted.threadid = thread.threadid)
GROUP BY inserted.threadid
但是我得到了一個「GROUP BY」子句(我期望的)的錯誤。問題是,我該如何做這項工作?
對不起,如果問題很愚蠢,但這是我第一次嘗試使用觸發器。
附加信息:線程表將包含threadid(int,主鍵),rating(float),vot(int)以及其他與當前問題無關的字段。 線程表只包含threadid(外鍵),userid(用戶表的主鍵的外鍵)和rating(tinyint在1和5之間)。
錯誤消息是「關鍵字'GROUP'附近的語法不正確。」
什麼是對錶的主鍵? – 2009-04-15 23:56:50
發佈表DML和實際的錯誤信息也會有幫助。 – 2009-04-16 00:06:52