Я создаю триггер всякий раз, когда событие покупки вставляется или обновляется в приведенной ниже таблице PurchaseEvent.
Фактическое количество товаров (завершенных покупок) в настоящее время не отслеживается в таблице, оно динамически рассчитывается каждый раз выполнив SUM для таблицы PurchaseEvent, например:
SELECT SUM(Quantity) FROM PurchaseEvent WHERE ProductID = @ProductID and PurchaseStatus = 'COMPLETED'
Ниже приведена основная таблица PurchaseEvent и новая таблица, которую я только что создал:
PurchaseEvent
- PurchaseEventID
- ProductID
- Quantity
- PurchaseStatus ( COMPLETED, CANCELLED)
ProductCount
- ProductID
- ProductCount
Я создаю триггер для обработки вставить или обновить события.
Строка может быть обновлена для изменения PurchaseStatus.
CREATE TRIGGER trg_UpdateProductCount
ON PurchaseEvent
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
// TODO
END
Поскольку триггер может быть запущен для одной или нескольких записей, что является лучшим способом обработки это?
Я думал:
UPDATE pc
SET rc.PurchaseCount = rc.PurchaseCount + SUM(i.ProductID)
FROM PurchaseCount pc
INNER JOIN Inserted i ON i.ProductID = pc.ProductID
WHERE i.PurchaseStatus = 'COMPLETED'
Но тогда я должен как-то обработать записи CANCELLED
также?
Можно ли просто увеличить / уменьшить Таблица PurchaseCount или единственный способ сделать это точно - СУММАТЬ оригинальную таблицу каждый раз, когда запись обновляется / вставляется? (и просто игнорируйте записи в таблице INSERTED)