>教育資源庫  本文通過講解觸發(fā)器的使用,其中重要的是理解inserted過程。當(dāng)在定義有觸發(fā)器的表上執(zhí)行UPDATE語句時,原始行(前像)被移入到deleted表,更新行(后像)被移入到inse">
sqlserver數(shù)據(jù)庫中使用觸發(fā)器經(jīng)驗談

sqlserver數(shù)據(jù)庫中使用觸發(fā)器經(jīng)驗談

ID:22372322

大?。?6.50 KB

頁數(shù):5頁

時間:2018-10-28

sqlserver數(shù)據(jù)庫中使用觸發(fā)器經(jīng)驗談_第1頁
sqlserver數(shù)據(jù)庫中使用觸發(fā)器經(jīng)驗談_第2頁
sqlserver數(shù)據(jù)庫中使用觸發(fā)器經(jīng)驗談_第3頁
sqlserver數(shù)據(jù)庫中使用觸發(fā)器經(jīng)驗談_第4頁
sqlserver數(shù)據(jù)庫中使用觸發(fā)器經(jīng)驗談_第5頁
資源描述:

《sqlserver數(shù)據(jù)庫中使用觸發(fā)器經(jīng)驗談》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。

1、SQLServer數(shù)據(jù)庫中使用觸發(fā)器經(jīng)驗談>>教育資源庫  本文通過講解觸發(fā)器的使用,其中重要的是理解inserted過程。當(dāng)在定義有觸發(fā)器的表上執(zhí)行UPDATE語句時,原始行(前像)被移入到deleted表,更新行(后像)被移入到inserted表。觸發(fā)器檢查deleted表和inserted表以及被更新的表,來確定是否更新了多行以及如何執(zhí)行觸發(fā)器動作?! ∮|發(fā)器是數(shù)據(jù)庫應(yīng)用中的重用工具,它的應(yīng)用很廣泛。這幾天寫一個化學(xué)數(shù)據(jù)統(tǒng)計方面的軟件,需要根據(jù)采樣,自動計算方差,在這里,我使用了觸發(fā)器??梢远x一個無論何時用INSERT語句向表中插入數(shù)據(jù)時

2、都會執(zhí)行的觸發(fā)器。當(dāng)觸發(fā)INSERT觸發(fā)器時,新的數(shù)據(jù)行就會被插入到觸發(fā)器表和inserted表中。inserted表是一個邏輯表,它包含了已經(jīng)插入的數(shù)據(jù)行的一個副本。inserted表包含了INSERT語句中已記錄的插入動作。inserted表還允許引用由初始化INSERT語句而產(chǎn)生的日志數(shù)據(jù)。觸發(fā)器通過檢查inserted表來確定是否執(zhí)行觸發(fā)器動作或如何執(zhí)行它。inserted表中的行總是觸發(fā)器表中一行或多行的副本。  日志記錄了所有修改數(shù)據(jù)的動作(INSERT、UPDATE和DELETE語句),但在事務(wù)日志中的信息是不可讀的。然而,inse

3、rted表允許你引用由INSERT語句引起的日志變化,這樣就可以將插入數(shù)據(jù)與發(fā)生的變化進(jìn)行比較,來驗證它們或采取進(jìn)一步的動作。也可以直接引用插入的數(shù)據(jù),而不必將它們存儲到變量中。  示例  在本例中,將創(chuàng)建一個觸發(fā)器。無論何時訂購產(chǎn)品(無論何時向OrderDetails表中插入一條記錄),這個觸發(fā)器都將更新Products表中的一列(UnitsInStock)。用原來的值減去訂購的數(shù)量值即為新值。USENorthage)的DELETE語句,和捕獲數(shù)據(jù)后像(afterimage)的INSERT語句。當(dāng)在定義有觸發(fā)器的表上執(zhí)行UPDATE語句時,原始

4、行(前像)被移入到deleted表,更新行(后像)被移入到inserted表。  觸發(fā)器檢查deleted表和inserted表以及被更新的表,來確定是否更新了多行以及如何執(zhí)行觸發(fā)器動作?! 】梢允褂肐FUPDATE語句定義一個監(jiān)視指定列的數(shù)據(jù)更新的觸發(fā)器。這樣,就可以讓觸發(fā)器容易的隔離出特定列的活動。當(dāng)它檢測到指定列已經(jīng)更新時,觸發(fā)器就會進(jìn)一步執(zhí)行適當(dāng)?shù)膭幼?,例如發(fā)出錯誤信息指出該列不能更新,或者根據(jù)新的更新的列值執(zhí)行一系列的動作語句。  語法IFUPDATE(<column_name>)  例1  本例阻止用戶修改Employee

5、s表中的EmployeeID列。USENorthployee_UpdateONEmployeesFORUPDATEASIFUPDATE(EmployeeID)BEGINRAISERROR('Transactioncannotbeprocessed.*****EmployeeIDnumbercannotbemodified.',10,1)ROLLBACKTRANSACTIONEND  INSTEADOF觸發(fā)器的工作過程  可以在表或視圖上指定INSTEADOF觸發(fā)器。執(zhí)行這種觸發(fā)器就能夠替代原始的觸發(fā)動作。INSTEADOF觸發(fā)器擴

6、展了視圖更新的類型。對于每一種觸發(fā)動作(INSERT、UPDATE或DELETE),每一個表或視圖只能有一個INSTEADOF觸發(fā)器?! NSTEADOF觸發(fā)器被用于更新那些沒有辦法通過正常方式更新的視圖。例如,通常不能在一個基于連接的視圖上進(jìn)行DELETE操作。然而,可以編寫一個INSTEADOFDELETE觸發(fā)器來實現(xiàn)刪除。上述觸發(fā)器可以訪問那些如果視圖是一個真正的表時已經(jīng)被刪除的數(shù)據(jù)行。將被刪除的行存儲在一個名為deleted的工作表中,就像AFTER觸發(fā)器一樣。相似地,在UPDATEINSTEADOF觸發(fā)器或者12下一頁>>>>這篇文章

7、來自..,。INSERTINSTEADOF觸發(fā)器中,你可以訪問inserted表中的新行?! 〔荒茉趲в蠧ustomersexFROMCustomersexico'GO  在該數(shù)據(jù)上創(chuàng)建視圖:CREATEVIECustomersMexGO  創(chuàng)建一個在上述視圖上的INSTEADOF觸發(fā)器:CREATETRIGGERCustomers_Update2ONCustomersVieany'BEGINUPDATECustomersGerSETCustomersGer.Phone=Inserted.PhoneFROMCustomersGer

8、JOINInsertedONCustomersGer.CustomerID=Inserted.CustomerIDENDELSEIFCo

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。