Отслеживание количества покупок с помощью триггера - PullRequest
0 голосов
/ 09 апреля 2020

Я создаю триггер всякий раз, когда событие покупки вставляется или обновляется в приведенной ниже таблице 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...