删除后的T-SQL触发器

时间:2011-03-03 16:29:14

标签: tsql triggers

情况:假设您有一个组织,学生和课程购买的数据库,并且管理员希望获得他们分配的课程的退款。默认情况下,该软件不支持退款。您无权访问源代码,但可以在数据库中设置触发器。

数据库结构:

  • 组织
    • 的organization_ID
    • account_balance
  • 学生
    • student_id数据
    • 的organization_ID
  • 购买
    • student_id数据
    • time_of_purchase
    • amount_to_refund

一般的想法是,当从购买表中删除一个条目(或多个!)时,会触发一个触发器以更新相应的帐户余额组织。 amount_to_refund 可以为null或零,因此在这种情况下不予退款。如果 time_of_purchase 超过30天,也不应退款。

任何想法如何解决这个问题?我一直在用另一个触发器建模它,但是我被UPDATE ... FROM ...语法抛弃了,我不能说我以前用过它。我看过MSDN,但我有点不知所措。

或者,我还想将行插入到包含退款金额和组织ID的另一个表(此处未记录)中。我只需要一个大致的想法,它适合我自己可以处理其余的。

1 个答案:

答案 0 :(得分:1)

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