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

平常時(shí)寫(xiě)觸發(fā)器(TRIGGER),一般會(huì)分別寫(xiě)插入(INSERT),刪除(delete)和更新(UPDATE)單獨(dú)的觸發(fā)器

但是有時(shí)候,可以視看處進(jìn)邏輯程度,可以把三者寫(xiě)成一個(gè)觸發(fā)器,只是在其中稍作判斷而已。

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

代碼如下:
–宣告兩個(gè)變量
DECLARE @D BIT = 0
DECLARE @I BIT = 0

–如果在DELETED內(nèi)部臨時(shí)觸發(fā)表找到記錄,說(shuō)明舊數(shù)據(jù)被刪除
IF EXISTS(SELECT TOP 1 1 FROM DELETED)
SET @D = 1

–如果在INSERTED內(nèi)部臨時(shí)觸發(fā)表找到記錄,說(shuō)明有新數(shù)據(jù)插入
IF EXISTS(SELECT TOP 1 1 FROM INSERTED)
SET @I = 1

–如果兩個(gè)表都有記錄,說(shuō)明觸發(fā)器是執(zhí)行更新觸發(fā)
IF @I = 1 AND @D = 1
PRINT(N’更新。’)

–如果變量@I值被變更為1,而變量@D沒(méi)有變更,說(shuō)明觸發(fā)器是執(zhí)行插入觸發(fā)
IF @I = 1 AND @D = 0
PRINT(N’插入’)

–下面判斷成立,說(shuō)明說(shuō)明觸發(fā)器是執(zhí)行刪除觸發(fā)
IF @I = 0 AND @D = 1
PRINT(N’刪除’)

另外有關(guān)兩個(gè)內(nèi)部臨時(shí)觸發(fā)表,觸發(fā)器的Inserted表和Deleted表

觸發(fā)器有兩個(gè)虛擬表,Inserted表和Deleted表,這兩個(gè)表在不同操作情況之下,表中的數(shù)據(jù)狀態(tài)可不一樣。
一、插入操作(INSERT)時(shí):Inserted表有數(shù)據(jù),Deleted表無(wú)數(shù)據(jù)。
二、更新操作(UPDATE)時(shí):Inserted表有數(shù)據(jù)(新數(shù)據(jù)),Deleted表有數(shù)據(jù)(舊數(shù)據(jù))。
三、刪除操作(DELETE)時(shí):Inserted表無(wú)數(shù)據(jù),Deleted表有數(shù)據(jù)。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊15 分享