【发布时间】:2019-05-16 20:31:54
【问题描述】:
我的数据库中有以下表格:
第一个表名为Amount,第二个名为Product,第三个名为Purchase。
我应该在插入金额表时创建触发器。例如,我将插入以下值:4、1、10,其中 4 是 id_purchase,1 是 id_product,4 是该产品的数量。触发器应该从Amount_On_Stock 中减去这个数量。在我的例子中,应该是:原来是 48,变成了 38。
这是我的触发器的代码:
CREATE TRIGGER AmountInsert ON Amount
AFTER INSERT
AS
BEGIN
UPDATE Product
SET Amount_On_Stock = (
SELECT
Amount_On_Stock
FROM Product
WHERE ID_Product = (
SELECT
MAX(ID_Product)
FROM Purchase
WHERE ID_Purchase = (
SELECT
MAX(ID_Purchase)
FROM Purchase
)
)
)-(
SELECT
Amount
FROM AMOUNT
WHERE ID_Product = (
SELECT
MAX(ID_Product)
FROM Purchase
WHERE ID_Purchase = (
SELECT
MAX(ID_Purchase)
FROM Purchase
)
)
)
END
但是当我尝试创建此触发器时,出现以下错误:
聚合表达式不能在 WHERE 子句中使用,除非它 包含在 HAVING 子句的子查询或选择列表中, 并且正在聚合的列不是外部引用。
那么,我该如何解决这个问题呢?
【问题讨论】:
-
这不是和你之前的问题(stackoverflow.com/questions/56158300/…)一样,已经有了可能的答案吗?您仍然没有使用
inserted或deleted伪表。 -
该代码不可读。所有这些子查询并排在一起,您无法分辨一个结束和下一个开始的位置。并且有多个子查询可以一遍又一遍地获取相同的值。您应该了解连接的工作原理。这太复杂了。
标签: sql sql-server triggers