【发布时间】:2016-11-10 03:59:12
【问题描述】:
我有这两张桌子:
dbo.Restaurants(rid,name,phone,area,address,zip,desc,foodtype,avgRating)
和
dbo.Reviews(rev_id,rest_id,user_id,taste, service,environment,value,average,comment)
我一直在尝试创建一个执行此操作的触发器: 当 dbo.Reviews 上的一行被删除、更新或插入时,触发器会计算餐厅的新平均评分,如下所示:
select rid, round(avg(average)*20,0) as 'average'
from dbo.Restaurants inner join dbo.Reviews on rid=rest_id
group by rid
然后更新 dbo.Restaurants 上的 avgRating 单元格,其中 dbo.Restaurants.rid= dbo.Reviews.rest_id 。
到目前为止,我想出了这个:
CREATE TRIGGER [defAverage]
ON [dbo].[Reviews]
AFTER UPDATE, DELETE, INSERT
AS
BEGIN
select rid, round(avg(average)*20,0) as 'average'
from Restaurants inner join Reviews on rid=rest_id
group by rid
order by 'average' desc
SET NOCOUNT ON
UPDATE [dbo].[Restaurants]
SET [dbo].[Restaurants].avgRating = 'average'
where [dbo].[Reviews].rest_id = [dbo].[Restaurants].rid
END
这显然行不通,否则我不会在这里。 我正在使用 Visual Studio Ultimate 2013,它使用 SQL Server Tools 2012。
提前感谢您的时间和建议。
【问题讨论】:
标签: sql-server visual-studio visual-studio-2013 triggers sql-server-2012