判斷觸發(fā)器正在處理的是插入,刪除還是更新觸發(fā)
更新時(shí)間:2012年01月20日 20:19:22 作者:
平常時(shí)寫觸發(fā)器(TRIGGER),一般會(huì)分別寫插入(INSERT),刪除(DELETE)和更新(UPDATE)單獨(dú)的觸發(fā)器
但是有時(shí)候,可以視看處進(jìn)邏輯程度,可以把三者寫成一個(gè)觸發(fā)器,只是在其中稍作判斷而已。
你可以根據(jù)從下面方法判斷觸發(fā)器是是處理了插入,刪除還是更新觸發(fā)的:
--宣告兩個(gè)變量
DECLARE @D BIT = 0
DECLARE @I BIT = 0
--如果在DELETED內(nèi)部臨時(shí)觸發(fā)表找到記錄,說明舊數(shù)據(jù)被刪除
IF EXISTS(SELECT TOP 1 1 FROM DELETED)
SET @D = 1
--如果在INSERTED內(nèi)部臨時(shí)觸發(fā)表找到記錄,說明有新數(shù)據(jù)插入
IF EXISTS(SELECT TOP 1 1 FROM INSERTED)
SET @I = 1
--如果兩個(gè)表都有記錄,說明觸發(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)兩個(gè)內(nèi)部臨時(shí)觸發(fā)表,觸發(fā)器的Inserted表和Deleted表
觸發(fā)器有兩個(gè)虛擬表,Inserted表和Deleted表,這兩個(gè)表在不同操作情況之下,表中的數(shù)據(jù)狀態(tài)可不一樣。
一、插入操作(INSERT)時(shí):Inserted表有數(shù)據(jù),Deleted表無數(shù)據(jù)。
二、更新操作(UPDATE)時(shí):Inserted表有數(shù)據(jù)(新數(shù)據(jù)),Deleted表有數(shù)據(jù)(舊數(shù)據(jù))。
三、刪除操作(DELETE)時(shí):Inserted表無數(shù)據(jù),Deleted表有數(shù)據(jù)。
你可以根據(jù)從下面方法判斷觸發(fā)器是是處理了插入,刪除還是更新觸發(fā)的:
復(fù)制代碼 代碼如下:
--宣告兩個(gè)變量
DECLARE @D BIT = 0
DECLARE @I BIT = 0
--如果在DELETED內(nèi)部臨時(shí)觸發(fā)表找到記錄,說明舊數(shù)據(jù)被刪除
IF EXISTS(SELECT TOP 1 1 FROM DELETED)
SET @D = 1
--如果在INSERTED內(nèi)部臨時(shí)觸發(fā)表找到記錄,說明有新數(shù)據(jù)插入
IF EXISTS(SELECT TOP 1 1 FROM INSERTED)
SET @I = 1
--如果兩個(gè)表都有記錄,說明觸發(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)兩個(gè)內(nèi)部臨時(shí)觸發(fā)表,觸發(fā)器的Inserted表和Deleted表
觸發(fā)器有兩個(gè)虛擬表,Inserted表和Deleted表,這兩個(gè)表在不同操作情況之下,表中的數(shù)據(jù)狀態(tài)可不一樣。
一、插入操作(INSERT)時(shí):Inserted表有數(shù)據(jù),Deleted表無數(shù)據(jù)。
二、更新操作(UPDATE)時(shí):Inserted表有數(shù)據(jù)(新數(shù)據(jù)),Deleted表有數(shù)據(jù)(舊數(shù)據(jù))。
三、刪除操作(DELETE)時(shí):Inserted表無數(shù)據(jù),Deleted表有數(shù)據(jù)。
您可能感興趣的文章:
相關(guān)文章
SQL server 定時(shí)自動(dòng)備份數(shù)據(jù)庫的圖文方法
這篇文章主要介紹了SQL server 定時(shí)自動(dòng)備份數(shù)據(jù)庫的圖文方法,需要的朋友可以參考下2017-02-02sqlserver 各種判斷是否存在(表名、函數(shù)、存儲(chǔ)過程等)
在sql server中,如何判斷sql server表是否存在呢?下面就將為您詳細(xì)介紹該方法,供您參考,希望對(duì)您加深理解sql server表能起到些許作用2013-02-02sql動(dòng)態(tài)行轉(zhuǎn)列的兩種方法
sql動(dòng)態(tài)行轉(zhuǎn)列的兩種方法,需要的朋友可以參考一下2013-04-04Java 實(shí)現(xiàn)連接sql server 2000
JDBC技術(shù)事實(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-02MSSQL 計(jì)算兩個(gè)日期相差的工作天數(shù)的語句
MSSQL計(jì)算兩個(gè)日期相差的工作天數(shù)的代碼,需要的朋友可以參考下。2009-09-09