在大型資料庫系統中,儲存過程和觸發器具有很重要的作用。無論是儲存過程還是觸發器,都是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 server 2000 中,建立乙個儲存過程有兩種方法:一種是使用transaction-sql 命令create procedure, 另一種是使用圖形化管理工具enterprise manager。 用transaction- sql 建立儲存過程是一種較為快速的方法,但對於初學者,使用enterprise manager 更易理解,更為簡單。
當建立儲存過程時,需要確定儲存過程的三個組成部分;
12.2.1 使用enterprise manager 建立儲存過程
按照下述步驟用enterprise manager 建立乙個儲存過程:
12.2.2 用create procedure 命令建立儲存過程
通過運用create procedure 命令能夠建立儲存過程,在建立儲存過程之前,應該考慮到以下幾個方面:
用create procedure 建立儲存過程的語法規則如下:
create proc [ edure ] procedure_name [ ; number ] [
[ varying ] [ = default ] [ output ]
] [ ,...n ]
[ with ]
[ for replication ]
as sql_statement [ ...n ]
各引數的含義如下:
另外應該指出,乙個儲存過程的最大尺寸為128m, 使用者定義的儲存過程必須建立在當前資料庫中。
下面將給出幾個例子,用來詳細介紹如何建立包含有各種保留字的儲存過程。
SQL儲存過程
什麼是儲存過程呢?定義 將常用的或很複雜的工作,預先用sql語句寫好並用乙個指定的名稱儲存起來,那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫execute,即可自動完成命令。講到這裡,可能有人要問 這麼說儲存過程就是一堆sql語句而已啊?microsoft公司為什麼還要新增...
sql儲存過程
概念 sql server提供了一種方法,它可以將一些固定的操作集中起來由sql server資料庫伺服器來完成,以實現某個任務,這種方法就是儲存過程。儲存過程是sql語句和可選控制流語句的預編譯集合,儲存過程在資料庫中可由應用程式通過乙個呼叫執行,而且允許使用者申明變數 有條件的執行以及其它強大的...
SQL儲存過程
儲存過程 1.返回值 create proc example4 as begin declare 返回值 int select 返回值 sum 庫存量 from 產品 return 返回值 endgo 接受這個返回值必須要用變數來接收,如 declare 接收值 int exec 接收值 examp...