删除后的T-SQL触发器

问题描述:

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

数据库结构:

  • 组织
    • 的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,但我有点不知所措。

(可选)我还想将行插入另一个表(此处未记录),其中包含退款金额和组织ID。我只需要一个适合的大概想法,并且可以自己处理剩下的问题。

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    
+0

我调整它到我们的应用程序(我只是在这里给出了一个粗略的例子),它似乎工作,虽然我发现我不希望在删除的临时表中的数据。但这不在这个问题的范围之内。谢谢。 – Guttsy 2011-03-03 19:35:16

+0

@Guttsy:很高兴能帮到你! – rsenna 2011-03-03 20:10:30