一.存儲(chǔ)過(guò)程
1.存儲(chǔ)過(guò)程的分類(lèi)
存儲(chǔ)過(guò)程是一種數(shù)據(jù)庫(kù)對(duì)象,存儲(chǔ)在數(shù)據(jù)庫(kù)內(nèi),可由應(yīng)用程序通過(guò)一個(gè)調(diào)用執(zhí)行,而且
允許用戶(hù)聲明變量、有條件執(zhí)行,具有很強(qiáng)的編程功能
存儲(chǔ)過(guò)程可以分為兩類(lèi):系統(tǒng)存儲(chǔ)過(guò)程、用戶(hù)存儲(chǔ)過(guò)程和擴(kuò)展性存儲(chǔ)過(guò)程
1).系統(tǒng)存儲(chǔ)過(guò)程
系統(tǒng)存儲(chǔ)過(guò)程是由SQL Server系統(tǒng)提供的存儲(chǔ)過(guò)程,可以作為命令執(zhí)行各種操作。
系統(tǒng)存儲(chǔ)過(guò)程主要用來(lái)從系統(tǒng)表中獲取信息,為系統(tǒng)管理員管理SQL Server提供幫助,
為用戶(hù)查看數(shù)據(jù)庫(kù)對(duì)象提供方便。
系統(tǒng)存儲(chǔ)過(guò)程定義在系統(tǒng)數(shù)據(jù)庫(kù)master中,其前綴是sp_。在調(diào)用時(shí)不必在存儲(chǔ)過(guò)程前
加上數(shù)據(jù)庫(kù)名
2).用戶(hù)存儲(chǔ)過(guò)程
用戶(hù)存儲(chǔ)過(guò)程是指用戶(hù)根據(jù)自身需要,為完成某一特定功能,在用戶(hù)數(shù)據(jù)庫(kù)中創(chuàng)建的存
儲(chǔ)過(guò)程。
3).擴(kuò)展存儲(chǔ)過(guò)程
擴(kuò)展存儲(chǔ)過(guò)程以在SQL Server環(huán)境外執(zhí)行的動(dòng)態(tài)鏈接庫(kù)(DLL,Dynamic-LinkLibrar-ies)
來(lái)實(shí)現(xiàn)。擴(kuò)展存儲(chǔ)過(guò)程通過(guò)前綴“xp_”來(lái)標(biāo)識(shí),它們以與存儲(chǔ)過(guò)程相似的方式來(lái)執(zhí)行。
二.觸發(fā)器
觸發(fā)器是當(dāng)特定事件出現(xiàn)的時(shí)候,自動(dòng)執(zhí)行或者激活的,與連接到數(shù)據(jù)庫(kù)中的用戶(hù)或者應(yīng)用程序無(wú)關(guān).。一個(gè)表最多有三種不同類(lèi)型的觸發(fā)器,當(dāng)UPDATE發(fā)生時(shí)使用一個(gè)觸發(fā)器;DELETE發(fā)生時(shí)使用一個(gè)觸發(fā)器;INSERT發(fā)生時(shí)使用一個(gè)觸發(fā)器
1.與存儲(chǔ)過(guò)程的區(qū)別
觸發(fā)器與存儲(chǔ)過(guò)程主要的區(qū)別在于觸發(fā)器的運(yùn)行方式。存儲(chǔ)過(guò)程必須由用戶(hù)、應(yīng)用程序或者觸發(fā)器來(lái)顯示式地調(diào)用并執(zhí)行,而觸發(fā)器是當(dāng)特定事件出現(xiàn)的時(shí)候,自動(dòng)執(zhí)行或者激活的,與連接到數(shù)據(jù)庫(kù)中的用戶(hù)或者應(yīng)用程序無(wú)關(guān)
注意: 盡管觸發(fā)器的功能強(qiáng)大,但是它們也可能對(duì)服務(wù)器的性能很有害。因此,要注意不要在觸發(fā)器中放置太多的功能,因?yàn)樗鼘⒔档晚憫?yīng)速度,使用戶(hù)等待的時(shí)間增加
2.觸發(fā)器的分類(lèi)
1). DDL 觸發(fā)器
DDL觸發(fā)器當(dāng)服務(wù)器或者數(shù)據(jù)庫(kù)中發(fā)生數(shù)據(jù)定義語(yǔ)言(DDL)事件時(shí)將被調(diào)用
2). DML 觸發(fā)器
DML觸發(fā)器是當(dāng)數(shù)據(jù)庫(kù)服務(wù)器中發(fā)生數(shù)據(jù)操作語(yǔ)言(DML)事件時(shí)要執(zhí)行的操作
3.兩種特殊的表:DELETED表和INSERTED表
SQL Server 2008為每個(gè)觸發(fā)器語(yǔ)句都創(chuàng)建了兩種特殊的表:DELETED表和INSERTED表。
這是兩個(gè)邏輯表,由系統(tǒng)來(lái)自創(chuàng)建和維護(hù),用戶(hù)不能對(duì)他們進(jìn)行修改。他們存放在內(nèi)存而不
是數(shù)據(jù)庫(kù)中。這兩個(gè)表的結(jié)構(gòu)總是與被該觸發(fā)器作用的表的結(jié)構(gòu)相同。觸發(fā)器執(zhí)行完成后,
與該觸發(fā)器相關(guān)的這兩個(gè)表也會(huì)被刪除
DELETE表存放由執(zhí)行DELETE或者UPDATE語(yǔ)句而要從表中刪除的所有行。在執(zhí)行DELE
TE或者UPDATE操作時(shí),被刪除的行從觸發(fā)觸發(fā)器的表中被移動(dòng)到DELETE表,這兩個(gè)表不
會(huì)有共同的行。
INSERT 表存放由執(zhí)行INSERET或者UPDATE語(yǔ)句而要向表中插入的所有行。在執(zhí)行INS
ERT或者UPDATE事務(wù)中,新的行同時(shí)添加到觸發(fā)觸發(fā)器的表和INSERT表中,INSERT表的內(nèi)
容是觸發(fā)觸發(fā)器的表中新行的副本。
注意: 一個(gè)UPDATE事務(wù)可以看作先執(zhí)行一個(gè)DELETE 操作,再執(zhí)行一個(gè)INSERT操作,舊的行首先被移動(dòng)到DELETE 表,然后新行同時(shí)插入觸發(fā)觸發(fā)器的表和INSERT表。
更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄