2011-03-03 183 views
0

情況:假設您有一個組織,學生和課程購買的數據庫,並且管理員想要爲他們分配的課程獲得退款。該軟件默認不支持退款。您無權訪問源代碼,但可以在數據庫中設置觸發器。刪除後的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。我只需要一個適合的大概想法,並且可以自己處理剩下的問題。

回答

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

我調整它到我們的應用程序(我只是在這裏給出了一個粗略的例子),它似乎工作,雖然我發現我不希望在刪除的臨時表中的數據。但這不在這個問題的範圍之內。謝謝。 – Guttsy 2011-03-03 19:35:16

+0

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