В нашей системе в настоящее время имеется таблица транзакций, которая иногда содержит повторяющиеся транзакции для данного клиента.
В этой таблице customerId может быть несколько записей независимо от статуса транзакции (активной или отмененной).
DailyTransactions
- TransactionId
- CustomerId
- Status (Active, Cancelled)
Мне нужно создать триггер, который создает, поддерживает новую таблицу, и эта таблица будет 1 запись на customerId. Эта запись будет существовать, только если статус активен.
DailyActiveTransactions
- TransactionId
- CustomerId
Таким образом, триггер будет вставлен в эту таблицу DailyActiveTransaction с использованием следующих правил:
- Вставить в DailyActiveTransactions, если статус «активный», а строка еще не существует
- Обновите TransactionId до нового TransactionId, если это новая транзакция со статусом 'active', а идентификатор транзакции больше, чем текущий.
- Если таблица 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
Я не уверен, как обращаться с обновленным делом, нужно ли мне также просматривать удаленную таблицу?