Я пытаюсь создать триггер, который обновит мою таблицу заказов с информацией о заказе, которая находится в таблице OrderDetail. Таблица деталей может содержать несколько строк для нескольких элементов в заказе. Они связаны вместе с OrderID. То, что я до сих пор:Trigger to Update Table
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 установил OrderTotal = SUM (SELECT (SELECT OrderTotal Stuff)), но это дает мне синтаксическую ошибку перед первым SELECT.
Это на SQL Server 2000.
EDIT: Я изменил запрос ПОСЛЕ вставки, так как я хочу OrderTotal быть обновлен после любой вставки
второй Edit: я пытаюсь включать вставленной мета-таблицы, так как это должно содержать идентификатор заказа последней вставленной строки, и только одна строка будет вставлена за раз. Теперь, хотя я получаю сообщение об ошибке: «Недостаточно или некорректно указывать информацию о столбцах. Слишком много строк были затронуты обновлением». И, глядя на колонку с порядковым номером, каждая строка в моей таблице обновляется с общей суммой заказа. Поэтому я думаю, что я близок, но я все еще что-то пропущу.