sql server數(shù)據(jù)庫觸發(fā)器實(shí)例講解文章出處_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1SqlServer數(shù)據(jù)庫觸發(fā)器實(shí)例講解文章出處定義:何為觸發(fā)器?在SQLServer里面也就是對(duì)某一個(gè)表的一定的操作,觸發(fā)某種條件,從而執(zhí)行的一段程序。觸發(fā)器是一個(gè)特殊的存儲(chǔ)過程。常見的觸發(fā)器有三種:分別應(yīng)用于Update事件。(SQLServer2000定義了新的觸發(fā)器,這里不提)我為什么要使用觸發(fā)器?比如,這么兩個(gè)表:CreateTableStudent(學(xué)生表StudentIDintprimarykey學(xué)號(hào))CreateTabl

2、eBrowRecd(學(xué)生借書記錄表BrowRecdintidentity(11)流水號(hào)StudentIDint學(xué)號(hào)BrowDatedatetime借出時(shí)間ReturnDAteDatetime歸還時(shí)間...)用到的功能有:1.如果我更改了學(xué)生的學(xué)號(hào)我希望他的借書記錄仍然與這個(gè)學(xué)生相關(guān)(也就是同時(shí)更改借書記錄表的學(xué)號(hào))2.如果該學(xué)生已經(jīng)畢業(yè),我希望刪除他的學(xué)號(hào)的同時(shí),也刪除它的借書記錄。等等。這時(shí)候可以用到觸發(fā)器。對(duì)于1,創(chuàng)建一個(gè)Updat

3、e觸發(fā)器:CreateTriggertruStudentOnStudent在Student表中創(chuàng)建觸發(fā)器fUpdate為什么事件觸發(fā)As事件觸發(fā)后所要做的事情ifUpdate(StudentID)beginUpdateBrowRecdSetStudentID=i.StudentIDFromBrowRecdbrddedid和ed臨時(shí)表Wherebr.StudentID=d.StudentIDend理解觸發(fā)器里面的兩個(gè)臨時(shí)的表:ded。注意

4、d與ed分別表示觸發(fā)事件的表“舊的一條記錄”和“新的一條記錄”。一個(gè)數(shù)據(jù)庫系統(tǒng)中有兩個(gè)虛擬表用于存儲(chǔ)在表中記錄改動(dòng)的信息,分別是:虛擬表ed虛擬表d在表記錄新增時(shí)存放新增的記錄不存儲(chǔ)記錄修改時(shí)存放用來更新的新記錄存放更新前的記錄刪除時(shí)不存儲(chǔ)記錄存放被刪除的記錄一個(gè)Update的過程可以看作為:生成新的記錄到ed表,復(fù)制舊的記錄到d表,然后刪除Student記錄并寫入新紀(jì)錄。對(duì)于2,創(chuàng)建一個(gè)觸發(fā)器CreatetriggertrdStude

5、ntOnStudent3TABLE語句。示例在本例中,將創(chuàng)建一個(gè)觸發(fā)器,無論何時(shí)刪除一個(gè)產(chǎn)品類別(即從Categies表中刪除一條記錄),該觸發(fā)器都會(huì)更新Products表中的Discontinued列。所有受影響的產(chǎn)品都標(biāo)記為1,標(biāo)示不再使用這些產(chǎn)品了。USENthwindCREATETRIGGERCategy_ONCategiesFASUPDATEPSETDiscontinued=1FROMProductsASPINNERJOINd

6、ASdONP.CategyID=d.CategyIDUPDATE觸發(fā)器的工作過程可將UPDATE語句看成兩步操作:即捕獲數(shù)據(jù)前像(befeimage)的語句,和捕獲數(shù)據(jù)后像(afterimage)的語句。當(dāng)在定義有觸發(fā)器的表上執(zhí)行UPDATE語句時(shí),原始行(前像)被移入到d表,更新行(后像)被移入到ed表。觸發(fā)器檢查d表和ed表以及被更新的表,來確定是否更新了多行以及如何執(zhí)行觸發(fā)器動(dòng)作??梢允褂肐FUPDATE語句定義一個(gè)監(jiān)視指定列的數(shù)

7、據(jù)更新的觸發(fā)器。這樣,就可以讓觸發(fā)器容易的隔離出特定列的活動(dòng)。當(dāng)它檢測(cè)到指定列已經(jīng)更新時(shí),觸發(fā)器就會(huì)進(jìn)一步執(zhí)行適當(dāng)?shù)膭?dòng)作,例如發(fā)出錯(cuò)誤信息指出該列不能更新,或者根據(jù)新的更新的列值執(zhí)行一系列的動(dòng)作語句。語法IFUPDATE()例1本例阻止用戶修改Employees表中的EmployeeID列。USENthwindGOCREATETRIGGEREmployee_UpdateONEmployeesFUPDATEASIFUPDATE(Emplo

8、yeeID)BEGINRAISERR(’Transactioncannotbeprocessed.EmployeeIDnumbercannotbemodified.’101)ROLLBACKTRANSACTIONENDINSTEADOF觸發(fā)器的工作過程可以在表或視圖上指定INSTEADOF觸發(fā)器。執(zhí)行這種觸發(fā)器就能夠替代原始的觸發(fā)動(dòng)作。INSTEADOF觸發(fā)器擴(kuò)展了視圖更新的類型。對(duì)于每一種觸發(fā)動(dòng)作(、UPDATE或),每一個(gè)表或視圖只

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論