【正文】
elect * from inserted PRINT ‘deleted表:’ Select * from deleted Go 圖 93 觸發(fā)器的執(zhí)行結(jié)果 DML觸發(fā)器創(chuàng)建 ?例 92 創(chuàng)建一個(gè)觸發(fā)器,在 s 表上創(chuàng)建一個(gè)插入、更新類(lèi)型的觸發(fā)器。 例 93建立一個(gè)觸發(fā)器,當(dāng)向 sc表中添加數(shù)據(jù)時(shí),如果添加的數(shù)據(jù)與 s表中的數(shù)據(jù)不匹配(沒(méi)有對(duì)應(yīng)的學(xué)號(hào)),則將此數(shù)據(jù)刪除。 程序清單如下: CREATE TRIGGER sc_insupd ON sc FOR INSERT, UPDATE AS DECLARE cj int, SELECT cj= from inserted IF ( cj0 or cj 100) BEGIN RAISERROR ( 39。, 16, 1) ROLLBACK TRANSACTION END DML觸發(fā)器的應(yīng)用 2. 使用 UPDATE觸發(fā)器 ?當(dāng)在一個(gè)有 UPDATE觸發(fā)器的表中修改記錄時(shí),表中原來(lái)的記錄被移動(dòng)到刪除表中,修改過(guò)的記錄插入到了插入表中,觸發(fā)器可以參考刪除表和插入表以及被修改的表,以確定如何完成數(shù)據(jù)庫(kù)操作。 程序清單如下: 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ù)的歷史表組成。程序清單如下: 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)刪除操作。 程序清單如下: 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)的記錄。這些語(yǔ)句主要是以 CREATE、 ALTER 和 DROP 開(kāi)頭的語(yǔ)句。 ?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)中的更改或事件。 DDL 觸發(fā)器無(wú)法作為 INSTEAD OF 觸發(fā)器使用。] [...n]|EXTERNAL NAME method