程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 淺談sql server的存儲過程和觸發器

淺談sql server的存儲過程和觸發器

編輯:關於SqlServer

一.存儲過程

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表。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved