但是有時候,可以視看處進邏輯程度,可以把三者寫成一個觸發器,只是在其中稍作判斷而已。
你可以根據從下面方法判斷觸發器是是處理了插入,刪除還是更新觸發的:
復制代碼 代碼如下:
--宣告兩個變量
DECLARE @D BIT = 0
DECLARE @I BIT = 0
--如果在DELETED內部臨時觸發表找到記錄,說明舊數據被刪除
IF EXISTS(SELECT TOP 1 1 FROM DELETED)
SET @D = 1
--如果在INSERTED內部臨時觸發表找到記錄,說明有新數據插入
IF EXISTS(SELECT TOP 1 1 FROM INSERTED)
SET @I = 1
--如果兩個表都有記錄,說明觸發器是執行更新觸發
IF @I = 1 AND @D = 1
PRINT(N'更新。')
--如果變量@I值被變更為1,而變量@D沒有變更,說明觸發器是執行插入觸發
IF @I = 1 AND @D = 0
PRINT(N'插入')
--下面判斷成立,說明說明觸發器是執行刪除觸發
IF @I = 0 AND @D = 1
PRINT(N'刪除')
另外有關兩個內部臨時觸發表,觸發器的Inserted表和Deleted表
觸發器有兩個虛擬表,Inserted表和Deleted表,這兩個表在不同操作情況之下,表中的數據狀態可不一樣。
一、插入操作(INSERT)時:Inserted表有數據,Deleted表無數據。
二、更新操作(UPDATE)時:Inserted表有數據(新數據),Deleted表有數據(舊數據)。
三、刪除操作(DELETE)時:Inserted表無數據,Deleted表有數據。