情况:假设您有一个组织,学生和课程购买的数据库,并且管理员希望获得他们分配的课程的退款。默认情况下,该软件不支持退款。您无权访问源代码,但可以在数据库中设置触发器。
数据库结构:
一般的想法是,当从购买表中删除一个条目(或多个!)时,会触发一个触发器以更新相应的帐户余额组织。 amount_to_refund 可以为null或零,因此在这种情况下不予退款。如果 time_of_purchase 超过30天,也不应退款。
任何想法如何解决这个问题?我一直在用另一个触发器建模它,但是我被UPDATE ... FROM ...语法抛弃了,我不能说我以前用过它。我看过MSDN,但我有点不知所措。
或者,我还想将行插入到包含退款金额和组织ID的另一个表(此处未记录)中。我只需要一个大致的想法,它适合我自己可以处理其余的。
答案 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