1.5 SQL Server 2000預存程序管理使用者在使用資料庫時考慮最多的是系統的速度和效率,現有的DBMS系統大多提供了一些方法或機制來提高系統的使用效能。SQL Server提供了一種方法,它可以將一些固定的操作集中起來由SQL Server資料庫伺服器來完成,以實現某個任務,這種方法就是預存程序。下面我們來介紹一下如何建立、修改和刪除預存程序。
1.5.1 建立預存程序在建立預存程序的時候,要考慮下列因素。● 不能將CREATE PROCEDURE語句與其他SQL語句組合到單個批處理中。● 建立預存程序的許可權預設屬於資料庫擁有者,該所有者可將此許可權授予其他使用者。● 預存程序是資料庫物件,其名稱必須遵守標識符規則。● 只能在當前資料庫中建立預存程序。在企業管理器中,展開指定執行個體的資料庫,選中“預存程序”目錄,然後單擊滑鼠右鍵,在彈出的捷徑功能表中選擇“建立預存程序”命令,開啟“預存程序屬性”對話方塊,4-20所示。圖4-20 預存程序屬性在“文本”文字框中,編寫預存程序。在建立預存程序時,應考慮。 ● 所有輸入參數和向調用過程或批處理返回的輸出參數。● 執行資料庫操作(包括調用其他過程)的編程語句。● 返回至調用過程或批處理以表明成功或失敗(以及失敗原因)的狀態值。輸入完畢後,單擊“檢查文法”按鈕,檢查文法是否正確,系統會出現提示資訊。如果提示正確,單擊“確定”按鈕,完成預存程序的建立。使用CREATE PROCEDURE建立預存程序的文法形式如下: CREATE PROCEDURE
procedure_name[;number][{@parameter
data_type} [VARYING][=
default][OUTPUT]][,...n] WITH {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}] [FOR REPLICATION] AS
sql_statement [ ...n ] 其中各參數說明如下。 ● procedure_name:用於指定要建立的預存程序的名稱。 ● number:該參數是可選的整數,它用來對同名的預存程序分組,以便用一條DROP PROCEDURE語句即可將同組的過程一起除去。 ● @parameter:過程中的參數。在CREATE PROCEDURE語句中可以聲明一個或多個參數。 ● data_type:用於指定參數的資料類型。 ● VARYING:用於指定作為輸出OUTPUT參數支援的結果集。 ● default:用於指定參數的預設值。 ● OUTPUT:表明該參數是一個返回參數。 ● RECOMPILE:表明SQL Server不會儲存該預存程序的執行計畫。● ENCRYPTION:表示SQL Server加密了syscomments表,該表的text欄位是包含 CREATE PROCEDURE語句的預存程序文本。 ● FOR REPLICATION:用於指定不能在訂閱伺服器上執行為複製建立的預存程序。 ● AS:用於指定該預存程序要執行的操作。● sql_statement:是預存程序中要包含的任意數目和類型的Transact-SQL語句。例如,建立預存程序sp_ShowStudents,使用該預存程序列出表StudentsInfo中全部學生的姓名及其系別,其文法如下:CREATE PROCEDURE sp_ShowStudentsAS SELECT Sname, Sdpt FROM StudentsInfoGO
1.5.2 修改預存程序預存程序可以根據使用者的要求或者基表定義的改變而改變。讀者可以在“預存程序屬性”對話方塊中修改預存程序。也可以使用ALTER PROCEDURE語句更改先前通過執行 CREATE PROCEDURE語句建立的預存程序,但不會更改許可權,也不影響相關的預存程序或觸發器。其文法形式如下:ALTER PROCEDURE
procedure_name[;number][{@parameter
data_type}[VARYING][=
default][OUTPUT]][,...n][WITH {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}][FORREPLICATION] AS
sql_statement [ ...n ]其中各參數的含義與建立預存程序時所使用的基本相同,這裡就不再重複了。
1.5.3 刪除預存程序讀者可以在企業管理器中刪除預存程序:右擊要刪除的預存程序,並在彈出的捷徑功能表中選擇“刪除”命令即可。刪除預存程序也可以使用DROP命令,DROP命令可以將一個或者多個預存程序或者預存程序組從當前資料庫中刪除,其文法形式如下:drop procedure {
procedure_name } [,…n]其中,
procedure_name用於指定要刪除的預存程序名稱。另外,可以使用該命令同時刪除多個預存程序,只需在要刪除的預存程序名稱之間用逗號隔開即可。例如,刪除表StudentsInfo中名為sp_ShowStudents的預存程序,其文法如下:DROP procedure sp_ShowStudents