2014年6月11日 星期三

[Sql] trigger 簽到資料表練習~ after 與 instead of 差別

Q: after 與 instead of 的差別

A: 顧名思義,after 會先把資料insert到資料表,然後在去判斷trigger裡面的邏輯
instead of 則是執行的sql會先暫存,然後執行trigger,並依trigger 的sql去寫入。

我的狀況是一個簽到狀況,當使用者是第一次簽到,則增加積分,如果使用instead of的話,我還要額外再寫一次insert into到簽到的資料表,這也會衍生其他問題,例如之後有新增簽到欄位,這邊也要跟著改。

所以這邊使用after(請看SQL第三行)較好。

  1. CREATE TRIGGER Tri_Demo
  2.         ON Gps_SignIn
  3. AFTER INSERT
  4. AS
  5. BEGIN
  6.         IF (SELECT COUNT(g.account)
  7.                         FROM Gps_SignIn g
  8.                         INNER JOIN INSERTED i ON i.OID = g.OID AND g.account = i.account
  9.                 ) <= 1
  10.         BEGIN
  11.                 --新增簽到分數
  12.                 INSERT INTO Bonus (ContentId,Account,TYPE,CreateTime,Bonus)
  13.                 SELECT '', i.account, 1, GETDATE(), 999
  14.                 FROM INSERTED i
  15.         END
  16. END

沒有留言:

張貼留言