如何使用SQL Server INSTEAD-OF触发器
如何使用SQL Server INSTEAD-OF觸發(fā)器 | ||||
觸發(fā)器是類似于存儲(chǔ)程序的數(shù)據(jù)庫(kù)對(duì)象,它響應(yīng)數(shù)據(jù)庫(kù)環(huán)境下的某個(gè)請(qǐng)求。SQL Sever 2005包含3個(gè)觸發(fā)器對(duì)象:AFTER,數(shù)據(jù)定義語(yǔ)言 (DDL)和INSTEAD-OF。 AFTER觸發(fā)器是存儲(chǔ)程序,它發(fā)生于數(shù)據(jù)操作語(yǔ)句作用之后,例如刪除語(yǔ)句等。DDL是SQL Server 2005的新觸發(fā)器,允許響應(yīng)數(shù)據(jù)庫(kù)引擎中對(duì)象定義水平事件(例如:DROP TABLE語(yǔ)句)。INSTEAD-OF觸發(fā)器是對(duì)象,在數(shù)據(jù)庫(kù)引擎中可以取代數(shù)據(jù)操作語(yǔ)句而執(zhí)行。例如:將INSTEAD-OF INSERT觸發(fā)器附加到表,告訴數(shù)據(jù)庫(kù)執(zhí)行此觸發(fā)器。 使用INSTEAD-OF觸發(fā)器的理由 INSTEAD-OF觸發(fā)器是SQL Sever功能強(qiáng)大的對(duì)象,允許開發(fā)人員轉(zhuǎn)移數(shù)據(jù)庫(kù)引擎完成不同的工作,以滿足開發(fā)要求。其中的一個(gè)例子是在數(shù)據(jù)庫(kù)的表中添加INSTEAD-OF觸發(fā)器,當(dāng)不需要修改表時(shí),可以對(duì)表的內(nèi)容進(jìn)行回滾。使用此方法時(shí),必須格外小心,因?yàn)槿魏沃付ǖ谋硇薷闹?#xff0c;INSTEAD-OF觸發(fā)器必須處于激活狀態(tài)。 使用INSTEAD-OF觸發(fā)器一個(gè)更充分理由是視圖處理。在視圖中添加INSTEAD-OF觸發(fā)器后,則可創(chuàng)建更新的視圖。可更新視圖允許完整地提取數(shù)據(jù)庫(kù)大綱,因此可以用此方法設(shè)計(jì)系統(tǒng),而不需要擔(dān)心OLTP數(shù)據(jù)庫(kù)大綱的問(wèn)題,并且取代數(shù)據(jù)修改一組標(biāo)準(zhǔn)視圖集。 范例
為了更好地說(shuō)明可更新視圖概念,我們提供一個(gè)示例。在本例中,我們?cè)O(shè)計(jì)一個(gè)產(chǎn)品表(記錄產(chǎn)品),一個(gè)購(gòu)買表(記錄購(gòu)買)。Listing A包含了創(chuàng)建表的腳本,運(yùn)行此腳本后則得到示例中所要用到的表。運(yùn)行Listing B腳本向表中添加數(shù)據(jù)。
現(xiàn)在表中已經(jīng)有數(shù)據(jù)了,我可以為這些表創(chuàng)建一些有意義的視圖。請(qǐng)查看Listing C。
這是個(gè)典型的產(chǎn)品水平的視圖。它聯(lián)合了數(shù)據(jù)庫(kù)中的兩個(gè)表,使得數(shù)據(jù)簡(jiǎn)單化了。但是,對(duì)于數(shù)據(jù)提取,使用視圖則沒(méi)有什么優(yōu)勢(shì)。在視圖上附上INSTEAD-OF觸發(fā)器后,則允許修改表,但是我不需要直接修改表中的數(shù)據(jù)。我使用Listing D中的代碼在vw_ProductPurchases視圖上創(chuàng)建一個(gè)INSTEAD-OF觸發(fā)器。
請(qǐng)注意此INSTEAD OF觸發(fā)器的聲明。SQL Server創(chuàng)建的默認(rèn)的觸發(fā)器為AFTER觸發(fā)器,因此,必須在觸發(fā)器定義中指定INSTEAD OF子句。 觸發(fā)器的第一條語(yǔ)句是“check”語(yǔ)句。本例中我使用此語(yǔ)句檢測(cè)INSERTED表以確保顯示ProductID字段,并且保證提供顯示其他PurchasePrice 或 ProductPrice字段。 如果必要的數(shù)據(jù)通過(guò)INSERT語(yǔ)句都插入到視圖中,則觸發(fā)器將插入指定的值到數(shù)據(jù)表。下面即是視圖的INSERT語(yǔ)句。 INSERT INTO vw_ProductPurchases(ProductID, PurchasePrice) VALUES(1, 700) INSERT語(yǔ)句提供了有效的ProductID和PurchasePrice,這意味著新記錄插入到Purchases表。 結(jié)論 INSTEAD-OF觸發(fā)器具有強(qiáng)大的功能和靈活性。如果系統(tǒng)不大,使用視圖系統(tǒng)提取數(shù)據(jù)大綱能夠極大保護(hù)數(shù)據(jù)庫(kù)程序。 上面的例子很簡(jiǎn)單,系統(tǒng)中所用到的復(fù)雜的觸發(fā)器需要考慮安全性問(wèn)題、時(shí)間開銷和其他限制。 |
總結(jié)
以上是生活随笔為你收集整理的如何使用SQL Server INSTEAD-OF触发器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 飞鸽传书是怎么就变成飞秋了的?
- 下一篇: 从1.5k到18k, 一个程序员的5年成