2013-04-10 95 views
0

我有两个表创建了inventory和customer_sales。在仓库工作的个人无法访问customer_sales表。创建只触发特定行的SQL触发器

因此,我添加了一个名为num_sales的库存表的额外字段。

我想创建一个触发器功能,只要添加新的客户销售。它将对应于已售出行的特定inventory_item,而不是整个表。

这是我到目前为止。

ALTER TABLE inventory 
ADD num_sales INT 

UPDATE movies SET num_sales = 0; 

ALTER TABLE movies ALTER COLUMN num_rentals INT NOT NULL; 

GO 
CREATE TRIGGER tr_movies_num_rentals_add 
    ON customer_sales FOR INSERT 
    AS 
    BEGIN 
    UPDATE inventory 
     SET num_sales = num_sales + (SELECT sale_status_code FROM INSERTED) 
     WHERE 1 = (SELECT sale_status_code FROM INSERTED); 
    END; 

注: sale_status_code值:1 =出售,2 =保留,3 =丢失。

更新:我正在使用Microsoft SQL Server管理工作室。我是新手,这是我上学的问题。

+1

*** SQL ***只是*结构化查询语言* - 许多数据库系统使用的语言,但不是数据库产品......许多东西都是特定于供应商的 - 所以我们真的需要知道什么* *您正在使用的数据库系统**(以及哪个版本)(请相应地更新标签).... – 2013-04-10 21:17:01

+1

并且请不要在您的标题中留言 - 不需要对任何人大喊..... – 2013-04-10 21:17:23

回答

0

首先假设插入会有多行。 SQL服务器触发器不会逐行操作。你需要连接插入不使用子查询。接下来,如果您希望在插入,更新和删除时发生这种情况,那么您需要使用多于一个INSert触发器。删除触发器应使用与插入和更新不同的公式,因为您将从清单总计中删除已删除表中的值。