一.存儲過程
1.存儲過程的分類
存儲過程是一種數據庫對象,存儲在數據庫內,可由應用程序通過一個調用執行,而且
允許用戶聲明變量、有條件執行,具有很強的編程功能
存儲過程可以分為兩類:系統存儲過程、用戶存儲過程和擴展性存儲過程
1).系統存儲過程
系統存儲過程是由SQL Server系統提供的存儲過程,可以作為命令執行各種操作。
系統存儲過程主要用來從系統表中獲取信息,為系統管理員管理SQL Server提供幫助,
為用戶查看數據庫對象提供方便。
系統存儲過程定義在系統數據庫master中,其前綴是sp_。在調用時不必在存儲過程前
加上數據庫名
2).用戶存儲過程
用戶存儲過程是指用戶根據自身需要,為完成某一特定功能,在用戶數據庫中創建的存
儲過程。
3).擴展存儲過程
擴展存儲過程以在SQL Server環境外執行的動態鏈接庫(DLL,Dynamic-LinkLibrar-ies)
來實現。擴展存儲過程通過前綴“xp_”來標識,它們以與存儲過程相似的方式來執行。
二.觸發器
觸發器是當特定事件出現的時候,自動執行或者激活的,與連接到數據庫中的用戶或者應用程序無關.。一個表最多有三種不同類型的觸發器,當UPDATE發生時使用一個觸發器;DELETE發生時使用一個觸發器;INSERT發生時使用一個觸發器
1.與存儲過程的區別
觸發器與存儲過程主要的區別在於觸發器的運行方式。存儲過程必須由用戶、應用程序或者觸發器來顯示式地調用並執行,而觸發器是當特定事件出現的時候,自動執行或者激活的,與連接到數據庫中的用戶或者應用程序無關
注意: 盡管觸發器的功能強大,但是它們也可能對服務器的性能很有害。因此,要注意不要在觸發器中放置太多的功能,因為它將降低響應速度,使用戶等待的時間增加
2.觸發器的分類
1). DDL 觸發器
DDL觸發器當服務器或者數據庫中發生數據定義語言(DDL)事件時將被調用
2). DML 觸發器
DML觸發器是當數據庫服務器中發生數據操作語言(DML)事件時要執行的操作
3.兩種特殊的表:DELETED表和INSERTED表
SQL Server 2008為每個觸發器語句都創建了兩種特殊的表:DELETED表和INSERTED表。
這是兩個邏輯表,由系統來自創建和維護,用戶不能對他們進行修改。他們存放在內存而不
是數據庫中。這兩個表的結構總是與被該觸發器作用的表的結構相同。觸發器執行完成後,
與該觸發器相關的這兩個表也會被刪除
DELETE表存放由執行DELETE或者UPDATE語句而要從表中刪除的所有行。在執行DELE
TE或者UPDATE操作時,被刪除的行從觸發觸發器的表中被移動到DELETE表,這兩個表不
會有共同的行。
INSERT 表存放由執行INSERET或者UPDATE語句而要向表中插入的所有行。在執行INS
ERT或者UPDATE事務中,新的行同時添加到觸發觸發器的表和INSERT表中,INSERT表的內
容是觸發觸發器的表中新行的副本。
注意: 一個UPDATE事務可以看作先執行一個DELETE 操作,再執行一個INSERT操作,舊的行首先被移動到DELETE 表,然後新行同時插入觸發觸發器的表和INSERT表。