Использование триггера для отслеживания активных транзакций в новой таблице, обработка сценариев вставки и обновления - PullRequest
0 голосов
/ 11 апреля 2020

В нашей системе в настоящее время имеется таблица транзакций, которая иногда содержит повторяющиеся транзакции для данного клиента.

В этой таблице customerId может быть несколько записей независимо от статуса транзакции (активной или отмененной).

DailyTransactions
- TransactionId
- CustomerId
- Status (Active, Cancelled)

Мне нужно создать триггер, который создает, поддерживает новую таблицу, и эта таблица будет 1 запись на customerId. Эта запись будет существовать, только если статус активен.

DailyActiveTransactions
- TransactionId
- CustomerId

Таким образом, триггер будет вставлен в эту таблицу DailyActiveTransaction с использованием следующих правил:

  1. Вставить в DailyActiveTransactions, если статус «активный», а строка еще не существует
  2. Обновите TransactionId до нового TransactionId, если это новая транзакция со статусом 'active', а идентификатор транзакции больше, чем текущий.
  3. Если таблица DailyTransactions обновлена, возможно, что Сценарий ios # 1 и # 2 повторяется.

Ниже приведено то, что я имею до сих пор, который обрабатывает только номер 1 сверху, но только если вставка представляет собой одну запись. Поскольку триггер может быть для нескольких записей, это становится сложным. Должен ли я как-то использовать временную таблицу для отдельного хранения дел?

CREATE TRIGGER DailyTransactionsUpdates ON DailyTransactions
AFTER INSERT, UPDATE
AS

IF EXISTS(SELECT * from DailyActiveTransactions WHERE CustomerID)
BEGIN  
  // how to handle updates
  // there could be multiple records being updated 

END      
ELSE
BEGIN
  -- if record does not already exist
  INSERT INTO DailyActiveTransactions
  (TransactionId, CustomerID)
  SELECT
   i.TransactionId,
   i.CustomerID
  FROM Inserted i
  WHERE i.Status = 'Active'
END

Я не уверен, как обращаться с обновленным делом, нужно ли мне также просматривать удаленную таблицу?

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