Sql Server 存儲過程基礎
將常用的或很複雜的工作,預先用SQL語句寫好並用一個指定的名稱存儲起來, 那麼以後要叫數據庫提供與已定義好的存儲過程的功能相同的服務時,隻需調用execute,即可自動完成命令。
存儲過程的優點:
1.存儲過程隻在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高數據庫執行速度。
2.當對數據庫進行複雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此複雜操作用存儲過程封裝起來與數據庫提供的事務處理結合一起使用。
3.存儲過程可以重複使用,可減少數據庫開發人員的工作量
4.安全性高,可設定隻有某此用戶才具有對指定存儲過程的使用權
創建存儲過程:
CREATE PROC[ EDURE ] [ owner. ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement [ ...n ]
owner
擁有存儲過程的用戶 ID 的名稱。owner 必須是當前用戶的名稱或當前用戶所屬的角色的名稱。
procedure_name
新存儲過程的名稱。過程名必須符合標識符規則,且對於數據庫及其所有者必須唯一。
;number
是可選的整數,用來對同名的過程分組,以便用一條 DROP PROCEDURE 語句即可將同組的過程一起除去。例如,名為 orders 的應用程序使用的過程可以命名為orderproc;1、orderproc;2 等。DROP PROCEDUREorderproc 語句將除去整個組。如果名稱中包含定界標識符,則數字不應包含在標識符中,隻應在procedure_name 前後使用適當的定界符。
@parameter
過程中的參數。在CREATE PROCEDURE 語句中可以聲明一個或多個參數。用戶必須在執行過程時提供每個所聲明參數的值(除非定義了該參數的默認值,或者該值設置為等於另一個參數)。存儲過程最多可以有2.100 個參數。
使用@ 符號作為第一個字符來指定參數名稱。參數名稱必須符合標識符的規則。每個過程的參數僅用於該過程本身;相同的參數名稱可以用在其它過程中。默認情況下,參數隻能代替常量,而不能用於代替表名、列名或其它數據庫對象的名稱。
data_type
參數的數據類型。除table 之外的其他所有數據類型均可以用作存儲過程的參數。但是,cursor 數據類型隻能用於 OUTPUT 參數。如果指定cursor 數據類型,則還必須指定VARYING 和OUTPUT 關鍵字。對於可以是cursor 數據類型的輸出參數,沒有最大數目的限製。
VARYING
指定作為輸出參數支持的結果集(由存儲過程動態構造,內容可以變化)。僅適用於遊標參數。
Default
參數的默認值。如果定義了默認值,不必指定該參數的值即可執行過程。默認值必須是常量或 NULL。如果過程將對該參數使用 LIKE 關鍵字,那麼默認值中可以包含通配符(%、_、[] 和 [^])。
OUTPUT
表明參數是返回參數。該選項的值可以返回給 EXEC[UTE]。使用 OUTPUT 參數可將信息返回給調用過程。Text、ntext 和image 參數可用作 OUTPUT 參數。使用 OUTPUT 關鍵字的輸出參數可以是遊標占位符。
N
表示最多可以指定 2.100 個參數的占位符。
AS
指定過程要執行的操作。
sql_statement
過程中要包含的任意數目和類型的Transact-SQL 語句。但有一些限製。
實例:
id | CityName | Short |
1 | 蘇州市 | sz |
2 | 無錫市 | wx |
3 | 常州市 | cz |
1.選擇表中所有內容並返回一個數據集:
CREATE PROCEDURE mysp_All AS select * from AjaxCity GO
CREATE PROCEDURE mysp_para @CityName varchar(255),@Short varchar(255) AS select * from AjaxCity where CityName=@CityName And Short=@Short GO
3.帶有輸出參數的存儲過程(返回前兩條記錄的ID的和)
CREATE PROCEDURE mysp_output @SUM int output AS select @SUM=sum([ID]) from (select top 2 * from AjaxCity) as tmpTable GO

本文來自百度文庫。
最後更新:2017-04-03 12:54:38