У меня есть две таблицы, назовите его Таблица_A и Таблица_B. Я хочу, чтобы создать триггер таким образом, что всякий раз, когда поле payment
в TABLE_A обновляется новая запись должна быть вставлена в TABLE_B, чтобы показать разницу в размерах всех платежей до и общих платежей в настоящее время. Две таблицы ниже:Обновление Trigger SQL Server
TABLE_A
A_id | payment |
1 | 1000 |
2 | 200 |
TABLE_B
B_id | difference |
Моя реализация триггера ниже. Я не уверен, как рассчитать эту разницу:
CREATE TRIGGER trigger_Difference
ON Table_A
FOR UPDATE
AS
BEGIN
DECLARE @Difference as INT
DECLARE @PreviousDiff as INT
BEGIN
SELECT @PreviousDiff = SUM(payment)
FROM Table_A
END
if update(payment)
BEGIN
SELECT @Difference = ***don't know what to put here***
FROM inserted
INSERT INTO Table_B (difference) VALUES (@Difference)
END
END
Подсказка: разница в общей сумме платежей * до * добавление этого платежа и * после * добавление этого платежа равно ровно одному платежу, самому последнему. –
У вашего триггера есть ** ОСНОВНАЯ ** ошибка в том, что вы, кажется, считаете, что она будет называться ** один раз в строке ** - это не **, а не случай. Триггер будет срабатывать ** один раз за оператор **, поэтому, если ваши утверждения 'UPDATE' влияют на 25 строк, вы будете запускать триггер ** сразу **, но тогда' Inserted' и 'Deleted' будут содержать 25 строк , Какой из этих 25 строк ваш код выберет здесь: 'SELECT @Difference = .... FROM Inserted' - он не детерминирован. Для этого нужно переписать триггер! –