У меня есть таблица CustomerMaster, которая имеет столбец с именем AccountBalance. Каждый клиент (уникально идентифицированный CustomerId в CustomerMaster) может иметь 0,1 или много транзакций в таблице ClientTransaction, в которой есть столбец «Сумма» (с указанием суммы транзакции). Я хочу создать триггер в таблице ClientTransaction для INSERT, UPDATE и DELETE для поддержки AccountBalance. Я попытался определить триггер ниже; когда, я удаляю только одну строку, он правильно обновляет AccountBalance; однако, когда я делаю DELETE ClientTransaction для удаления всех записей, это не сработает. Есть идеи?Trigger в SQL Server 2012 для обновления баланса аккаунта
CREATE TRIGGER [dbo].[ClientAccountBalanceUpdate]
ON [dbo].[ClientTransaction]
FOR INSERT,DELETE,UPDATE
AS
BEGIN
SET NOCOUNT ON;
if not exists (select 1 from Inserted) -- Delete trigger
update CustomerMaster set AccountBalance = AccountBalance - D.Amount from CustomerMaster inner join Deleted D on CustomerMaster.CustomerId = D.CustomerId
if not exists (select 1 from Deleted) -- Insert Trigger
update CustomerMaster set AccountBalance = AccountBalance + I.Amount from CustomerMaster inner join Inserted I on CustomerMaster.CustomerId = I.CustomerId
if exists (select 1 from Deleted) and exists (select 1 from Inserted) -- Update trigger
update CustomerMaster set AccountBalance = AccountBalance - D.Amount + I.Amount from CustomerMaster inner join Inserted I on CustomerMaster.CustomerId = I.CustomerId inner join Deleted D on CustomerMaster.CustomerId = D.CustomerId
END
Ваша проблема заключается в том, что вы ищете только одну из всех строк, которые удаляются, перед тем, как вы установите обновление, вам нужно «SUM» все строки из «DELETED». Такая же проблема будет получена, если более 1 строка вставлена или обновлена –
@SaUce да, это была моя догадка, и я попытался сделать сумму, но, должно быть, делал это неправильно, потому что она все еще не работает правильно. Не могли бы вы привести пример? Спасибо –