判斷觸發器正在處理的是插入,刪除還是更新觸發

2021-09-08 21:40:26 字數 801 閱讀 9837

平常時寫觸發器(trigger),一般會分別寫插入(insert),刪除(delete)和更新(update)單獨的觸發器。

但是有時候,可以視看處進邏輯程度,可以把三者寫成乙個觸發器,只是在其中稍作判斷而已。

你可以根據從下面方法判斷觸發器是是處理了插入,刪除還是更新觸發的:

--宣告兩個變數

declare

@dbit=0

declare

@ibit=0

--如果在deleted內部臨時觸發表找到記錄,說明舊資料被刪除 

ifexists(

select

top1

1from deleted)

set@d=1

--如果在inserted內部臨時觸發表找到記錄,說明有新資料插入     

ifexists(

select

top1

1from 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

'刪除')

另外有關兩個內部臨時觸發表,可參考:

oracle的觸發器執行插入

create or replace trigger tr msdata 當插入資料的時候進行運算 before insert on ms realdata1 for each row declare ua number 12,2 a相電壓 ub number 12,2 b相電壓 uc number ...

MYSQL丟擲異常 禁止刪除觸發器 同步插入觸發器

drop trigger if exists m create trigger m after delete on test.m for each row begin declare msg varchar 255 if old.scnt 2 then old為偽記錄佔位符,scnt為欄位名 set...

SQL 觸發器 插入觸發器 邊學邊專案寫的。

需求 專案表專案編碼觸發器編寫 為專案表dwproject編寫觸發器,目的為當建立新專案時,且projectno 為null或空字串時,自動建立專案編號,編號格式為4位年號,2位月份,2位順序號,如20160301。具體要求如下 1 觸發器名稱tig project number。2 僅insert...