帶您了解SQL Server觸發(fā)器管理
在我們使用SQL數(shù)據(jù)庫時,SQL Server觸發(fā)器是經(jīng)常需要使用到的,SQL Server觸發(fā)器是對某一個表的一定的操作,觸發(fā)某種條件,從而執(zhí)行的一段程序。
SQL Server是如何管理SQL Server觸發(fā)器來完成這些任務呢?下面我們將對其工作原理及實現(xiàn)做較為詳細的介紹。
每個SQL Server觸發(fā)器有兩個特殊的表:插入表和刪除表。這兩個表是邏輯表,并且這兩個表是由系統(tǒng)管理的,存儲在內(nèi)存中,不是存儲在數(shù)據(jù)庫中,因此不允許用戶直接對其修改。這兩個表的結構總是與被該觸發(fā)器作用的表有相同的表結構。這兩個表是動態(tài)駐留在內(nèi)存中的,當觸發(fā)器工作完成,這兩個表也被刪除。這兩個表主要保存因用戶操作而被影響到的原數(shù)據(jù)值或新數(shù)據(jù)值。另外,這兩個表是只讀的,即用戶不能向這兩個表寫入內(nèi)容,但可以引用表中的數(shù)據(jù)。
例如可用如下語句查看DELETED 表中的信息:
select * from deleted
下面詳細介紹這兩個表的功能:
插入表的功能
對一個定義了插入類型SQL Server觸發(fā)器的表來講,一旦對該表執(zhí)行了插入操作,那么對向該表插入的所有行來說,都有一個相應的副本存放到插入表中。即插入表就是用來存儲向原表插入的內(nèi)容。
刪除表的功能
對一個定義了刪除類型觸發(fā)器的表來講,一旦對該表執(zhí)行了刪除操作,則將所有的刪除行存放至刪除表中。這樣做的目的是,一旦觸發(fā)器遇到了強迫它中止的語句被執(zhí)行時, 刪除的那些行可以從刪除表中得以恢復。
需要強調的是,更新操作包括兩個部分,即先將更新的內(nèi)容去掉,然后將新值插入。因此對一個定義了更新類型觸發(fā)器的表來講,當報告會更新操作時,在刪除表中存放了舊值,然后在插入表中存放新值。
由于SQL Server觸發(fā)器僅當被定義的操作被執(zhí)行時才被激活,即僅當在執(zhí)行插入、刪除、和更新操作時,觸發(fā)器將執(zhí)行。每條SQL 語句僅能激活觸發(fā)器一次,可能存在一條語句影響多條記錄的情況。在這種情況下就需要變量@@rowcount的值,該變量存儲了一條SQL 語 句執(zhí)行后所影響的記錄數(shù),可以使用該值對觸發(fā)器的SQL 語句執(zhí)行后所影響的記錄求合計值。一般來說,首先要用IF 語句測試@@rowcount 的值以確定后面的語句是否執(zhí)行。
【編輯推薦】















 
 
 
 
 
 
 