在大型資料庫系統中,儲存過程和觸發器具有很重要的作用。無論是儲存過程還是觸發器,都是sql 語句和流程控制語句的集合。就
本質而言,觸發器也是一種儲存過程。儲存過程在運算時生成執行方式,所以,以後對其再執行時其執行速度很快。sql server 2000 不僅提供了使用者自定義儲存過程的功能,而且也提供了許多可作為工具使用的系統儲存過程。
12.1.1 儲存過程的概念
儲存過程(stored procedure)是一組為了完成特定功能的sql 語句集,經編譯後儲存在資料庫。中使用者通過指定儲存過程的名字並給出引數(如果該儲存過程帶有引數)來執行它。
在sql server 的系列版本中儲存過程分為兩類:系統提供的儲存過程和使用者自定義儲存過程。系統過程主要儲存在master 資料庫中並以sp_為字首,並且系統儲存過程主要是從系統表中獲取資訊,從而為系統管理員管理sql server 提供支援。通過系統儲存過程,ms sql server 中的許多管理性或資訊性的活動(如了解資料庫物件、資料庫資訊)都可以被順利有效地完成。儘管這些系統儲存過程被放在master 資料庫中,但是仍可以在其它資料庫中對其進行呼叫,在呼叫時不必在儲存過程名前加上資料庫名。而且當建立乙個新資料庫時,一些系統儲存過程會在新資料庫中被自動建立。使用者自定義儲存過程是由使用者建立並能完成某一特定功能(如查詢使用者所需資料資訊)的儲存過程。在本章中所涉及到的儲存過程主要是指使用者自定義儲存過程。
12.1.2 儲存過程的優點
當利用ms sql server 建立乙個應用程式時,transaction-sql 是一種主要的程式語言。若運用transaction-sql 來進行程式設計,有兩種方法。其一是,在本地儲存transaction- sql 程式,並建立應用程式向sql server 傳送命令來對結果進行處理。其二是,可以把部分用transaction-sql 編寫的程式作為儲存過程儲存在sql server 中,並建立應用程式來呼叫儲存過程,對資料結果進行處理儲存過程能夠通過接收引數向呼叫者返回結果集,結果集的格式由呼叫者確定;返回狀態值給呼叫者,指明呼叫是成功或是失敗;包括針對資料庫的操作語句,並且可以在乙個儲存過程中呼叫另一儲存過程。
我們通常更偏愛於使用第二種方法,即在sql server 中使用儲存過程而不是在客戶計算機上呼叫transaction-sql 編寫的一段程式,原因在於儲存過程具有以下優點:
(1) 儲存過程允許標準元件式程式設計
儲存過程在被建立以後可以在程式中被多次呼叫,而不必重新編寫該儲存過程的sql 語句。而且資料庫專業人員可隨時對儲存過程進行修改,但對應用程式源**毫無影響(因為應用程式源**只包含儲存過程的呼叫語句),從而極大地提高了程式的可移植性。
(2) 儲存過程能夠實現較快的執行速度
如果某一操作包含大量的transaction-sql **或分別被多次執行,那麼儲存過程要比批處理的執行速度快很多。因為儲存過程是預編譯的,在首次執行乙個儲存過程時,查詢優化器對其進行分析、優化,並給出最終被存在系統表中的執行計畫。而批處理的transaction- sql 語句在每次執行時都要進行編譯和優化,因此速度相對要慢一些。
(3) 儲存過程能夠減少網路流量
對於同乙個針對資料資料庫物件的操作(如查詢、修改),如果這一操作所涉及到的 transaction-sql 語句被組織成一儲存過程,那麼當在客戶計算機上呼叫該儲存過程時,網路中傳送的只是該呼叫語句,否則將是多條sql 語句,從而大大增加了網路流量,降低網路負載。
(4) 儲存過程可被作為一種安全機制來充分利用
系統管理員通過對執行某一儲存過程的許可權進行限制,從而能夠實現對相應的資料訪問許可權的限制,避免非授權使用者對資料的訪問,保證資料的安全。(我們將在14 章「sqlserver 的使用者和安全性管理」中對儲存過程的這一應用作更為清晰的介紹)
注意:儲存過程雖然既有引數又有返回值,但是它與函式不同。儲存過程的返回值只是指明執行是否成功,並且它不能像函式那樣被直接呼叫,也就是在呼叫儲存過程時,在儲存過程名字前一定要有exec保留字(如何執行儲存過程見本章下一字)。
MS SQL入門基礎 建立儲存過程
在ms sql server 2000 中,建立乙個儲存過程有兩種方法 一種是使用transaction sql 命令create procedure,另一種是使用圖形化管理工具enterprise manager。用transaction sql 建立儲存過程是一種較為快速的方法,但對於初學者,使...
MSSQL儲存過程
sqlserver 帶有返回值,儲存過程同時新增兩張表,並將第一張表的主鍵插入第二張表當中 2010 07 04 22 00 55 分類 sql 字型大小 訂閱 sql server 中,可以使用 scope identity identity ident current 來取得最後插入記錄的值值,...
MS SQL入門基礎 資料完整性概述
資料庫中的資料是從外界輸入的,而資料的輸入由於種種原因,會發生輸入無效或錯誤資訊。保證輸入的資料符合規定,成為了資料 庫系統,尤其是多使用者的關係資料庫系統首要關注的問題。資料完整性因此而提出。本章將講述資料完整性的概念及其在sql server 中的實現方法。資料完整性 data integrit...