我正在嘗試創建一個觸發器,它將使用在OrderDetail表中找到的訂單信息更新我的訂單表。詳細信息表可以按順序包含多個項目的多個行。這些通過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,並且一次只能插入一行。現在,雖然我收到一條錯誤消息,提示「密鑰列信息不足或不正確,太多的行受到更新的影響」。並查看訂單總額列,我的表中的每一行都會更新該訂單總額。所以我覺得我很接近,但我仍然錯過了一些東西。