在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 語句不能與其它SQL 語句合并在一起;
- 數據庫所有者具有默認的創建存儲過程的權限,它可把該權限傳遞給其它的用戶;
- 存儲過程作為數據庫對象其命名必須符合命名規則;
- 只能在當前數據庫中創建屬于當前數據庫的存儲過程。
用Create Procedure 創建存儲過程的語法規則如下:
CREATE PROC [ EDURE ] procedure_name [ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,...n ]
[ WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
[ FOR REPLICATION ]
AS sql_statement [ ...n ]
各參數的含義如下:
?
- procedure_name
是要創建的存儲過程的名字,它后面跟一個可選項number, 它是一個整數,用來區別一組同名的存儲過程。存儲過程的命名必須符合命名規則,在一個數據庫中或對其所有者而言,存儲過程的名字必須惟一。
- @parameter
是存儲過程的參數。在Create Procedure 語句中,可以聲明一個或多個參數。當調用該存儲過程時,用戶必須給出所有的參數值,除非定義了參數的缺省值。若參數的形式以 @parameter=value 出現,則參數的次序可以不同,否則用戶給出的參數值必須與參數列表中參數的順序保持一致。若某一參數以@parameter=value 形式給出,那么其它參數也必須以該形式給出。一個存儲過程至多有1024 個參數。
- Data_type
是參數的數據類型。在存儲過程中,所有的數據類型包括text 和image 都可被用作參數。但是,游標cursor 數據類型只能被用作OUTPUT 參數。當定義游標數據類型時,也必須對VARING 和OUTPUT 關鍵字進行定義。對可能是游標型數據類型的OUTPUT 參數而言,參數的最大數目沒有限制。
- VARYING
指定由OUTPUT 參數支持的結果集,僅應用于游標型參數。
- Default
是指參數的缺省值。如果定義了缺省值,那么即使不給出參數值,則該存儲過程仍能被調用。缺省值必須是常數,或者是空值。
- OUTPUT
表明該參數是一個返回參數。用OUTPUT 參數可以向調用者返回信息。Text 類型參數不能用作OUTPUT 參數。
- RECOMPILE
指明SQL Server 并不保存該存儲過程的執行計劃,該存儲過程每執行一次都又要重新編譯。
- ENCRYPTION
表明SQL Server 加密了syscomments 表,該表的text 字段是包含有Create procedure語句的存儲過程文本,使用該關鍵字無法通過查看syscomments 表來查看存儲過程內容。
- FOR REPLICATION
選項指明了為復制創建的存儲過程不能在訂購服務器上執行,只有在創建過濾存儲過程時(僅當進行數據復制時過濾存儲過程才被執行),才使用該選項。FOR REPLICATION與WITH RECOMPILE 選項是互不兼容的。
- AS
指明該存儲過程將要執行的動作。
- Sql_statement
是任何數量和類型的包含在存儲過程中的SQL 語句。
?
另外應該指出,一個存儲過程的最大尺寸為128M, 用戶定義的存儲過程必須創建在當前數據庫中。
?下面將給出幾個例子,用來詳細介紹如何創建包含有各種保留字的存儲過程。




????