我正在尝试创建一个触发器,该触发器将使用 OrderDetail 表中的订单信息更新我的 Orders 表。明细表可以为订单中的多个项目包含多行。这些通过 OrderID 链接在一起。到目前为止,我所拥有的是:
CREATE TRIGGER AfterOrderDetailInsert ON OrderDetail
AFTER INSERT AS
UPDATE Orders
SET OrderTotal = (
SELECT (
SELECT Sum(orderdetail.quantity * OrderDetail.Price *
( 1.0 -OrderDetail.ItemDiscount / 100.0 )
)
FROM orderdetail
WHERE OrderDetail.OrderId = Orders.OrderId
) *
( 1 - Orders.OrderDiscount / 100.0 ) *
( 1.0 - Orders.CustomerDiscount / 100.0 )
FROM OrderDetail
INNER JOIN Orders on OrderDetail.OrderID=Orders.OrderID
WHERE OrderDetail.OrderID IN (SELECT OrderID FROM Inserted)
)
我现在收到一个错误,说子查询返回了超过 1 个值。这不应该只返回一个总值吗?我尝试添加 SUM 以使其 UPDATE Orders Set OrderTotal = SUM(SELECT (SELECT OrderTotal Stuff)),但这在第一个 SELECT 之前给了我一个语法错误。
这是在 SQL Server 2000 上。
编辑:我已将查询更改为插入后,因为我希望在任何插入后更新 ordertotal
第二次编辑:我正在尝试包含插入的元表,因为它应该包含最新插入行的订单 ID,并且一次只能插入一行。现在虽然我收到一条错误消息,提示“键列信息不足或不正确。更新影响了太多行”。查看订单总额列,我表中的每一行都会更新为该订单总额。所以我想我已经接近了,但我仍然缺少一些东西。