SQL Server根据另一个表

时间:2015-09-14 13:48:08

标签: c# .net sql-server visual-studio

我在WebApp上工作,其中包含以下表格:

CREATE TABLE Store
(
   [Name_of_Store], [Number_of_Ratings_Received] TINYINT, [Average_Rating] TINYINT, 
 )
; 
 CREATE TABLE Employee
(
   [Name_of_Employee] ,[Number_of_Ratings_Received] TINYINT, [Average_Rating] TINYINT, 
 ) 
; 
 CREATE TABLE Rating 
 (

    [Rating_for_Employee_out_of_Ten] TINYINT, [Rating_for_Store_out_of_Ten] TINYINT,
)
;

为了论证,这些表包含以下数据:

INSERT INTO Store
    ([Name_of_Store], [Average_Rating], [Number_of_Ratings_Received])
VALUES
    ('Med', '5', '1'),
    ('Chem', '4', '3'),
;

INSERT INTO Employee
    ([Name_of_Employee], [Average_Rating], [Number_of_Ratings_Received])
VALUES
    ('John', '5', '1'),
    ('Stephen', '1', '8'),
;

假设有主键和外键相应地链接表。 Web应用程序更新了评级表,但后来我需要评级表(使用它与Store和Employee表的主键相对应的外键)来触发Store和Employee表中的评级字段。例如,每次“员工”#39;对商店评分,我需要包含在' Number_of_Ratings_Received'该特定商店的字段增加1和“Average_Rating”#39;字段进行相应调整。

请记住,这是我观看教程视频后的第一次尝试。我只是无法正确使用语法。到目前为止,我有:

GO
CREATE TRIGGER NumberOfRatingsReceived1 AFTER INSERT ON Store
    BEGIN
        UPDATE Store SET Number_of_Ratings_Received = AUTO_INCREMENT
    END

GO
    CREATE TRIGGER NumberOfRatingsReceived2 AFTER INSERT ON Employee
    BEGIN
        UPDATE Employee SET Number_of_Ratings_Received = AUTO_INCREMENT
    END

我努力让自动增量工作,更不用说平均计算。请帮助或指出我正确的方向。

2 个答案:

答案 0 :(得分:2)

我建议不要存储评分数和平均数。而是创建一个类似于以下的视图来动态计算信息,而不是在模型中内置数据重复。

CREATE VIEW StoreWithStatistics AS
  SELECT s.*, 
         COUNT(r.StoreRating) OVER (PARTITION BY s.StoreID) AS Number_of_Ratings_Recieved,  
         AVG(r.Rating_for_Store_out_of_Ten) OVER (PARTITION BY s.StoreID) AS Average_Rating
  FROM STORE s
  LEFT JOIN Rating r on s.StoreID = r.StoreID

答案 1 :(得分:1)

AUTO_INCREMENT中没有SQL Server。我相信你想在Rating表更新storeEmployee表上插入后说出来。所以改变你的触发器体如下面

CREATE TRIGGER NumberOfRatingsReceived1 
AFTER INSERT ON Rating
    BEGIN
        UPDATE Store 
        SET Number_of_Ratings_Received = Number_of_Ratings_Received + 1
        WHERE <condition>;
    END