Я пытаюсь решить следующую проблему:
У меня есть две таблицы. Первая называется «Платежи» и выглядит следующим образом:
id_payment | date | id_month | total
-----------+------------+----------+--------
1 | 2019-01-01 | 1 | 0
2 | 2019-01-02 | 2 | 160
Вторая таблицаназывается «Месяц» и выглядит следующим образом:
id_month | month_name | initial_date | final_date | total_payments
---------+---------------+--------------+------------+---------------
1 | January/2019 | 2019-01-01 | 2019-31-01 | 0
2 | February/2019 | 2019-01-02 | 2019-28-02 | 160
Теперь проблема в том, что если я обновлю дату одного из платежей, триггер должен сделать таблицы похожими на:
id_payment | date | id_month | total
-----------+------------+----------+--------
1 | 2019-01-01 | 1 | 0
2 | 2019-01-01 | 1 | 160
id_month | month_name | initial_date | final_date | total_payments
---------+---------------+--------------+------------+---------------
1 | January/2019 | 2019-01-01 | 2019-31-01 | 160
2 | February/2019 | 2019-01-02 | 2019-28-02 | 0
Но окончательный результат таков:
id_payment | date | id_month | total
-----------+------------+----------+-------
1 | 2019-01-01 | 1 | 0
2 | 2019-01-01 | 1 | 160
id_month | month_name | initial_date | final_date | total_payments
---------+---------------+--------------+------------+---------------
1 | January/2019 | 2019-01-01 | 2019-31-01 | 160
2 | February/2019 | 2019-01-02 | 2019-28-02 | 160
Мой триггер:
CREATE TRIGGER trg_UpdatingTotalInPaymentsInTheMonth
ON Payments
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
DECLARE @id_month AS INT
SELECT @id_month = id_month FROM inserted
SET @id_month = @id_month
DECLARE @total_payments AS MONEY
SELECT @total_paymdents = SUM(p.total)
FROM Payments AS p
WHERE o.id_month = @id_month
SET @total_payments = @total_payments
UPDATE month
SET total_payments = @total_payments
FROM month AS m
INNER JOIN inserted as i ON i.id_month = m.id_month
END