http://www.dotblogs.com.tw/dc690216/archive/2009/09/10/10553.aspx SQL - 如何判斷 Trigger 現在是 Insert Update Delete 在 進入此次主題之前,先來說說 Trigger (觸發程序) 吧。Trigger 可以說是一個開關,當你對資料表做出交易 (Insert、Update、Delete) 時 (或後),就會啟動 Trigger 的開關;這時,Trigger 就會很盡責的去執行一些商業邏輯運算 (包含 Bug)。不過,Trigger 除錯不易,畢竟 Trigger 也是一種黑盒子,在實際環境運作時,作對作錯都很難知道,所以在設計時,要分外小心,多用一些 Print、Try~Catch、Transaction 與 Rollback。那當 Delete 時,我應該如何抓到 Delete 的那筆資料的資訊呢!? 因為有可能會需拿著 Delete 的資訊,再去作其他的邏輯運算,那這資訊應該在哪裡得知呢!? 那就來看看下圖唄... 有 看懂嘛!? 意思很簡單,當 Insert 時,除了將資料新增到資料表中外,在 INSERTED 中,也會保留資料。Delete 時,也會將資料在 Deleted 中保留。Update 的運作,是先將資料表中的資料先刪除再新增,所以在 INSERTED 中,會記錄薪資料的記錄,而在 DELETED 會保留舊的記錄。所以,應該就了解要如何判斷,現在的 Trigger 是在 Insert、Update 或 Delete 了。 Code: CREATE TRIGGER dbo.使用者資料觸發程序 ON dbo.使用者資料 AFTER INSERT,DELETE,UPDATE AS BEGIN SET NOCOUNT ON; if (Select Count(*) From inserted) > 0 and (Select Count(*) From deleted) = 0 begin print ('新增') end if (Select Count(*) From inserted) = 0 and (Select Count(*) From deleted) > 0 begin print ('刪除') end if (Select Count(*) From inserted) > 0 and (Select Count(*) From deleted) > 0 begin print ('修改') end END GO