Триггер T-SQL после удаления - PullRequest
0 голосов
/ 03 марта 2011

Ситуация. Допустим, у вас есть база данных организаций, студентов и покупок курсов, и администратор хочет получить возмещение за курс, который они назначили. Программное обеспечение не поддерживает возврат по умолчанию. У вас нет доступа к исходному коду, но вы можете настроить триггеры в базе данных.

Структура базы данных:

  • организации
    • organization_id
    • account_balance
  • студенты
    • student_id
    • organization_id
  • покупки
    • student_id
    • time_of_purchase
    • amount_to_refund

Общая идея заключается в том, что при удалении записи (или нескольких!) Из таблицы закупки запускается триггер для обновления баланса счета соответствующей организации. amount_to_refund может быть нулевым или нулевым, поэтому в этом случае возврат не производится. Возврат также не должен производиться, если time_of_purchase было более 30 дней назад.

Есть идеи, как это осуществить? Я моделировал его из другого триггера, но меня сбивает синтаксис UPDATE ... FROM ..., который я не могу сказать, что использовал раньше. Я посмотрел на MSDN, но я немного ошеломлен.

При желании я также хотел бы вставить строки в другую таблицу (здесь не описано), содержащую сумму возврата и идентификатор организации. Мне просто нужна общая идея, где это подходит и, вероятно, я могу справиться со всем остальным.

1 Ответ

1 голос
/ 03 марта 2011
CREATE TRIGGER [dbo].[TrgPurchasesDelete] ON [dbo].[Purchases] FOR DELETE
AS
BEGIN
    UPDATE
        [dbo].[Organizations]
    SET
        account_balance = account_balance + DLTD.ammount_to_refund
    FROM
        [dbo].[Organizations] ORGA
        INNER JOIN [dbo].[Students] STDT ON
            STDT.organization_id = ORGA.organization_id
        INNER JOIN DELETED DLTD ON
            DLTD.student_id = STDT.student_id
    WHERE
        DLTD.ammount_to_refund > 0
        AND DLTD.time_of_purchase > DATEADD(DAY, -30, SYSDATE)
END
GO            
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...