【文章內(nèi)容簡介】
觸發(fā)器可以參考刪除表和插入表以及被修改的表,以確定如何完成數(shù)據(jù)庫操作。 ?例 95 創(chuàng)建一個修改觸發(fā)器,該觸發(fā)器防止用戶修改表 s的入學(xué)成績。 程序清單如下: create trigger tri_s_upd on s for update as if update( escore) begin raiserror(‘不能修改入學(xué)成績’ ,16,10) rollback transaction end go DML觸發(fā)器的應(yīng)用 UPDATE觸發(fā) ?例 96 DAS數(shù)據(jù)庫由存放實時數(shù)據(jù)的數(shù)據(jù)表以及存放歷史數(shù)據(jù)的歷史表組成。由于存放實時數(shù)據(jù)的數(shù)據(jù)表不斷更新,為了保存更新過的數(shù)據(jù),在實時表和歷史表之間建立了觸發(fā)器。程序清單如下: CREATE TRIGGER DasD_UTRIGGER ON DasD FOR UPDATE AS BEGIN IF Update(TV) /*數(shù)據(jù)更新 */ BEGIN UPDATE DasD SET UT=getdate() /*更新時間 */ FROM DasD,inserted WHERE = INSERT DasDHis(ID,TV,UT) SELECT , FROM DasD,inserted WHERE = /*將更新過的數(shù)據(jù)送入歷史庫 */ END END DML觸發(fā)器的應(yīng)用 3. 使用 DELETE觸發(fā)器 ?DELETE觸發(fā)器通常用于兩種情況,第一種情況是為了防止那些確實需要刪除但會引起數(shù)據(jù)一致性問題的記錄的刪除,第二種情況是執(zhí)行可刪除主記錄的子記錄的級聯(lián)刪除操作。 ?例 98 建立一個與 s表結(jié)構(gòu)一樣的表 s1,當刪除表 s中的記錄時,自動將刪除掉的記錄存放到 s1表中。 程序清單如下: CREATE TRIGGER tr_del ON s /*建立觸發(fā)器 FOR DELETE /*對表刪除操作 AS insert s1 select * from deleted /*將刪除掉的數(shù)據(jù)送入表 s1中 */ GO DML觸發(fā)器的應(yīng)用 3. 使用 DELETE觸發(fā)器 ?例 99當刪除表 s中的記錄時,自動刪除表 sc中對應(yīng)學(xué)號的記錄。 程序清單如下: CREATE TRIGGER tr_del_s ON s FOR DELETE BEGIN DECLARE @bh char(5) Select @bh= from deleted Delete sc where sno=@bh END DDL觸發(fā)器的創(chuàng)建和應(yīng)用 ?DDL 觸發(fā)器會為響應(yīng)多種數(shù)據(jù)定義語言 (DDL) 語句而激發(fā)。這些語句主要是以 CREATE、 ALTER 和 DROP 開頭的語句。 DDL 觸發(fā)器可用于管理任務(wù),例如審核和控制數(shù)據(jù)庫操作。 ?DDL 觸發(fā)器一般用于以下目的: ( 1)防止對數(shù)據(jù)庫架構(gòu)進行某些更改; ( 2)希望數(shù)據(jù)庫中發(fā)生某種情況以響應(yīng)數(shù)據(jù)庫架構(gòu)中的更改; ( 3)要記錄數(shù)據(jù)庫架構(gòu)中的更改或事件。 ?僅在運行觸發(fā) DDL 觸發(fā)器的 DDL 語句后, DDL 觸發(fā)器才會激發(fā)。 DDL 觸發(fā)器無法作為 INSTEAD OF 觸發(fā)器使用。 創(chuàng)建 DDL觸發(fā)器 ?使用 CREATE TRIGGER命令創(chuàng)建 DDL觸發(fā)器的語法形式如下: CREATE TRIGGER trigger_name ON {ALL SERVER|DATABASE}[WI