【发布时间】:2019-05-15 22:09:38
【问题描述】:
我面临以下情况:
我创建了一个触发器,它对插入第三个表做出反应。当我插入任何数据(例如1 1 2)时,最后一个数字应该从单元格中的库存数量列中减去,这需要ID Product(如图所示)。但是我怎么知道最后添加了哪一行呢?我想首先通过选择来做到这一点,但这似乎是不可能的。现在我认为可以在光标的帮助下做到这一点,但它似乎不是最好的变体。有没有更好的变种我该怎么做?
这是我的触发器代码,但不幸的是,它每次只从第一个产品中减去 1:
CREATE TRIGGER AmountInsert ON Amount
AFTER INSERT
AS
BEGIN
UPDATE Product
SET Amount_On_Stock =
(SELECT Amount_On_Stock FROM Product
WHERE ID_Product = 1) - 1
WHERE ID_Product = 1
END
【问题讨论】:
-
要知道最后添加的是哪一行,您需要一个日期时间列,或者您需要一个递增的整数列。
-
@DaleBurrell,更新了问题
-
请熟悉
inserted和deleted伪表,因为这是您确定要更新哪些行的方式。 -
如果取消购买会发生什么?您的仓库突然出现漏洞?您最好使用一个表格,该表格记录出于任何原因进入的内容和外出的内容(或从多个表格中提取,如购买、丢弃、交付、退货等)并通过获取来查询您的库存数量总和(当然否定的出局)。为方便起见,您可以为此编写一个视图。这样您的保险箱就可以始终拥有准确的数字并保留完整的历史记录。
标签: sql sql-server triggers