【发布时间】:2009-04-15 23:48:39
【问题描述】:
为了更容易理解,我将提出与论坛完全相同的问题(实际的应用程序根本与论坛无关,但我认为这样的平行更容易对于我们大多数人来说,实际的应用程序是关于大多数程序员无法理解的非常具体的东西(这是一个专为核心图形设计师设计的应用程序)。
假设有一个线程表存储有关每个论坛线程的信息,还有一个线程评级表存储每个用户的线程评级 (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, primary key)、rating (float)、voters(int) 和其他一些与当前问题无关的字段。 threadrating表只包含threadid(外键)、userid(users表主键的外键)和rating(1到5之间的小整数)。
错误消息是“关键字 'GROUP' 附近的语法不正确。”
【问题讨论】:
-
桌子上的主键是什么?
-
发布表格 DML 和实际错误消息也会有所帮助。
标签: sql-server triggers