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