判斷觸發(fā)器正在處理的是插入,刪除還是更新觸發(fā)
更新時間:2012年01月20日 20:19:22 作者:
平常時寫觸發(fā)器(TRIGGER),一般會分別寫插入(INSERT),刪除(DELETE)和更新(UPDATE)單獨的觸發(fā)器
但是有時候,可以視看處進邏輯程度,可以把三者寫成一個觸發(fā)器,只是在其中稍作判斷而已。
你可以根據(jù)從下面方法判斷觸發(fā)器是是處理了插入,刪除還是更新觸發(fā)的:
--宣告兩個變量
DECLARE @D BIT = 0
DECLARE @I BIT = 0
--如果在DELETED內(nèi)部臨時觸發(fā)表找到記錄,說明舊數(shù)據(jù)被刪除
IF EXISTS(SELECT TOP 1 1 FROM DELETED)
SET @D = 1
--如果在INSERTED內(nèi)部臨時觸發(fā)表找到記錄,說明有新數(shù)據(jù)插入
IF EXISTS(SELECT TOP 1 1 FROM INSERTED)
SET @I = 1
--如果兩個表都有記錄,說明觸發(fā)器是執(zhí)行更新觸發(fā)
IF @I = 1 AND @D = 1
PRINT(N'更新。')
--如果變量@I值被變更為1,而變量@D沒有變更,說明觸發(fā)器是執(zhí)行插入觸發(fā)
IF @I = 1 AND @D = 0
PRINT(N'插入')
--下面判斷成立,說明說明觸發(fā)器是執(zhí)行刪除觸發(fā)
IF @I = 0 AND @D = 1
PRINT(N'刪除')
另外有關(guān)兩個內(nèi)部臨時觸發(fā)表,觸發(fā)器的Inserted表和Deleted表
觸發(fā)器有兩個虛擬表,Inserted表和Deleted表,這兩個表在不同操作情況之下,表中的數(shù)據(jù)狀態(tài)可不一樣。
一、插入操作(INSERT)時:Inserted表有數(shù)據(jù),Deleted表無數(shù)據(jù)。
二、更新操作(UPDATE)時:Inserted表有數(shù)據(jù)(新數(shù)據(jù)),Deleted表有數(shù)據(jù)(舊數(shù)據(jù))。
三、刪除操作(DELETE)時:Inserted表無數(shù)據(jù),Deleted表有數(shù)據(jù)。
你可以根據(jù)從下面方法判斷觸發(fā)器是是處理了插入,刪除還是更新觸發(fā)的:
復(fù)制代碼 代碼如下:
--宣告兩個變量
DECLARE @D BIT = 0
DECLARE @I BIT = 0
--如果在DELETED內(nèi)部臨時觸發(fā)表找到記錄,說明舊數(shù)據(jù)被刪除
IF EXISTS(SELECT TOP 1 1 FROM DELETED)
SET @D = 1
--如果在INSERTED內(nèi)部臨時觸發(fā)表找到記錄,說明有新數(shù)據(jù)插入
IF EXISTS(SELECT TOP 1 1 FROM INSERTED)
SET @I = 1
--如果兩個表都有記錄,說明觸發(fā)器是執(zhí)行更新觸發(fā)
IF @I = 1 AND @D = 1
PRINT(N'更新。')
--如果變量@I值被變更為1,而變量@D沒有變更,說明觸發(fā)器是執(zhí)行插入觸發(fā)
IF @I = 1 AND @D = 0
PRINT(N'插入')
--下面判斷成立,說明說明觸發(fā)器是執(zhí)行刪除觸發(fā)
IF @I = 0 AND @D = 1
PRINT(N'刪除')
另外有關(guān)兩個內(nèi)部臨時觸發(fā)表,觸發(fā)器的Inserted表和Deleted表
觸發(fā)器有兩個虛擬表,Inserted表和Deleted表,這兩個表在不同操作情況之下,表中的數(shù)據(jù)狀態(tài)可不一樣。
一、插入操作(INSERT)時:Inserted表有數(shù)據(jù),Deleted表無數(shù)據(jù)。
二、更新操作(UPDATE)時:Inserted表有數(shù)據(jù)(新數(shù)據(jù)),Deleted表有數(shù)據(jù)(舊數(shù)據(jù))。
三、刪除操作(DELETE)時:Inserted表無數(shù)據(jù),Deleted表有數(shù)據(jù)。
相關(guān)文章
SQL server 定時自動備份數(shù)據(jù)庫的圖文方法
這篇文章主要介紹了SQL server 定時自動備份數(shù)據(jù)庫的圖文方法,需要的朋友可以參考下2017-02-02sqlserver 各種判斷是否存在(表名、函數(shù)、存儲過程等)
在sql server中,如何判斷sql server表是否存在呢?下面就將為您詳細介紹該方法,供您參考,希望對您加深理解sql server表能起到些許作用2013-02-02Java 實現(xiàn)連接sql server 2000
JDBC技術(shù)事實上是一種能通過JAVA語言訪問任何結(jié)構(gòu)化數(shù)據(jù)庫的應(yīng)用程序接口(API)(Sun這樣說的,我也不知道是不是真的),而且現(xiàn)在的JDBC 3.0據(jù)Sun說也能訪問Execel等電子表格程序!2009-06-06Microsoft SQLServer的版本區(qū)別及選擇
Microsoft SQLServer的版本區(qū)別及選擇...2007-02-02