A: 顧名思義,after 會先把資料insert到資料表,然後在去判斷trigger裡面的邏輯
instead of 則是執行的sql會先暫存,然後執行trigger,並依trigger 的sql去寫入。
我的狀況是一個簽到狀況,當使用者是第一次簽到,則增加積分,如果使用instead of的話,我還要額外再寫一次insert into到簽到的資料表,這也會衍生其他問題,例如之後有新增簽到欄位,這邊也要跟著改。
所以這邊使用after(請看SQL第三行)較好。
- CREATE TRIGGER Tri_Demo
- ON Gps_SignIn
- AFTER INSERT
- AS
- BEGIN
- IF (SELECT COUNT(g.account)
- FROM Gps_SignIn g
- INNER JOIN INSERTED i ON i.OID = g.OID AND g.account = i.account
- ) <= 1
- BEGIN
- --新增簽到分數
- INSERT INTO Bonus (ContentId,Account,TYPE,CreateTime,Bonus)
- SELECT '', i.account, 1, GETDATE(), 999
- FROM INSERTED i
- END
- END
沒有留言:
張貼留言