创建仅影响特定行的SQL触发器

时间:2013-04-10 21:14:32

标签: sql sql-server-2008

我有两个表创建了inventory和customer_sales。在仓库中工作的个人无法访问customer_sales表。

所以我在库存表中添加了一个名为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服务器管理工​​作室。我是新手,这是我上学的问题。

1 个答案:

答案 0 :(得分:0)

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