什么是存儲過程:
存儲過程(PRocedure)類似于C#語言中的方法,它是SQL語句和控制流語句的預編譯集合。存儲過程存儲在數據庫內,可由應用程序通過一個調用執行,而且允許用戶聲明變量、邏輯控制語句以及其他強大的編程功能。
存儲過程可包含邏輯控制語句和數據操作語句,它可以接收參數、輸出參數、返回單個或多個結果集以及返回值。
存儲過程在創建時即在服務器上進行編譯,所以執行起來比單個SQL語句快。
類似于C#中的類庫,SQL Server 提供了一些預編譯的存儲過程,這些存儲過程稱為“系統存儲過程”。
SQL Server中的存儲過程的特征如下:
1>接收輸入參數,并向調用過程或語句返回值。
2>包含在數據庫中執行操作或調用其他存儲過程的編程語句。
3>向調用過程返回狀態值,指示執行過程是否成功(如果失敗,還返回失敗原因)
使用存儲過程有下列優點:
1>允許模塊化程序設計
只需創建一次存儲過程并將其存儲在數據庫中,所以即可在程序中調用該過程任意次。
2>允許更快地執行
如果某操作需要大量的T-SQL代碼或需要重復執行,存儲過程將比T-SQL批處理代碼的執行要快。將在創建存儲過程時對其進行分析和優化,并可在首次執行該過程后使用該過程內存中的版本。但如果使用T-SQL批處理代碼,每次運行T-SQL語句時,都要從客戶端重復發送,并且在SQL-Server每次執行這些語句時,都要對其進行編譯和優化。
3>減少網絡流量
創建使用存儲過程后,一個需要數百行T-SQL代碼的操作,由一條執行該過程代碼的單獨語句就可實現,而不需要在網絡中發送數百行代碼
4>可作為安全機制使用
即使對于沒有直接執行存儲過程中語句的權限的用戶,也可授予他們執行該存儲過程的權限
存儲過程分為以下兩類:
1>系統存儲過程
2>用戶自定義存儲過程
常用的系統存儲過程:
sp_databases:列出服務器上的所有數據庫
sp_helpdb:報告有關指定數據庫或所有數據庫的信息
sp_renamedb:更改數據庫的名稱
sp_tables:返回當前環境下可查詢的對象的列表
sp_columns:返回某個表列的信息
sp_help:查看某個表的所有信息
sp_helpconstraint:查看某個表的約束
sp_helpindex:查看某個表的索引
sp_stored_procedures:列出當前環境中的所有存儲過程
sp_passWord:添加或修改登錄賬戶的密碼
sp_helptext:顯示默認值、未加密的存儲過程、用戶定義的存儲過程、觸發器或視圖的實際文本
另外,還有一個常用的擴展存儲過程:xp_cmdshell,它可以完成DOS命令下的一些操作,諸如創建文件夾、列出文件列表等。
http://www.cnblogs.com/roucheng/
用戶定義的存儲過程:
除了系統存儲過程,用戶還可以創建自己的存儲過程,可使用Microsoft SQL Management Studio或使用T-SQL語句,使用Microsoft SQL Management Studio創建存儲過程的步驟類似于視圖,用于創建存儲過程的T-SQL語句為CREATE PROCEDURE。所有的存儲過程都創建在當前數據庫中。
創建不帶參數的存儲過程:
使用T-SQL語句創建存儲過程的語法如下:
CREATE PROC[EDURE] 存儲過程名
AS
SQL語句
調用存儲過程:
EXEC 存儲過程名
創建帶輸入參數的的存儲過程:
輸入參數:可以在調用時向存儲過程傳遞參數,此類參數可用來在存儲過程中傳入值。
帶輸入參數的存儲過程T-SQL語句如下:
CREATE PROC[EDURE] 存儲過程名
@參數1 數據類型 [= 默認值],
……,
@參數n 數據類型 [= 默認值]
AS
SQL語句
調用存儲過程:
EXEC 存儲過程名 參數1的值,……,參數n的值
或
EXEC 存儲過程名 @參數1=值,……,@參數n=值
創建帶輸出參數的存儲過程:
輸出參數:如果希望返回值,則可以使用輸出參數,輸出參數后有“OUTPUT”標記,執行存儲過程后,將把返回值存放在輸出參數中,可供其他T-SQL語句讀取訪問。
帶輸出參數的存儲過程T-SQL語法如下:
CREATE PROC[EDURE] 存儲過程名
@參數1 數據類型 [OUTPUT ],
……,
@參數n 數據類型 [OUTPUT]
AS
SQL語句
調用存儲過程:
EXEC 存儲過程名 變量名 OUTPUT
新聞熱點
疑難解答