什么是存儲過程: 存儲過程是由一些SQL語句組成的代碼塊,這些SQL語句像一個方法一樣實現(xiàn)一些功能(對單表或多表的增刪改查),然后再給這個代碼塊取一個名字稿静,在用到這個功能的時候調用他就行了梭冠。可以理解為經過封裝的SQL語句改备。
存儲過程的好處:
1.由于數(shù)據(jù)庫執(zhí)行動作時控漠,是先編譯再執(zhí)行。然而存儲過程是一個編譯過的代碼塊悬钳,所以執(zhí)行效率要比普通SQL語句高盐捷。
2.一個存儲過程在網絡中交互時可以替代大量的SQL語句,降低網絡的通信量默勾,提高通信速率碉渡。
3.通過存儲過程能夠使沒有權限的用戶在控制之下間接地存取數(shù)據(jù)庫,從而確保數(shù)據(jù)安全母剥。
存儲過程的語法和參數(shù)詳解
一些基本語法
--------------創(chuàng)建存儲過程-----------------
CREATE PROC [ EDURE ] procedure_name [ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,...n ]
[ WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
[ FOR REPLICATION ]
AS sql_statement [ ...n ]
--------------調用存儲過程-----------------
EXECUTE Procedure_name '' --存儲過程如果有參數(shù)滞诺,后面加參數(shù)格式為:@參數(shù)名 =value,也可直接為參數(shù)值value
--------------刪除存儲過程-----------------
drop procedure procedure_name --在存儲過程中能調用另外一個存儲過程环疼,而不能刪除另外一個存儲過程
創(chuàng)建存儲過程的參數(shù):
1.procedure_name :存儲過程的名稱习霹,在前面加#為局部臨時存儲過程,加##為全局臨時存儲過程秦爆。
2.; number:是可選的整數(shù)序愚,用來對同名的過程分組,以便用一條 DROP PROCEDURE 語句即可將同組的過程一起除去等限。例如爸吮,名為 orders 的應用程序使用的過程可以命名為 orderproc;1、orderproc;2 等望门。DROP PROCEDURE orderproc 語句將除去整個組形娇。如果名稱中包含定界標識符,則數(shù)字不應包含在標識符中筹误,只應在 procedure_name 前后使用適當?shù)亩ń绶?/p>
3.@parameter: 存儲過程的參數(shù)桐早。可以有一個或多個厨剪。用戶必須在執(zhí)行過程時提供每個所聲明參數(shù)的值(除非定義了該參數(shù)的默認值)哄酝。存儲過程最多可以有 2.100 個參數(shù)。
使用 @ 符號作為第一個字符來指定參數(shù)名稱祷膳。參數(shù)名稱必須符合標識符的規(guī)則陶衅。每個過程的參數(shù)僅用于該過程本身;相同的參數(shù)名稱可以用在其它過程中直晨。默認情況下搀军,參數(shù)只能代替常量膨俐,而不能用于代替表名、列名或其它數(shù)據(jù)庫對象的名稱罩句。有關更多信息焚刺,請參見 EXECUTE。
4.data_type:參數(shù)的數(shù)據(jù)類型门烂。所有數(shù)據(jù)類型(包括 text乳愉、ntext 和 image)均可以用作存儲過程的參數(shù)。不過诅福,cursor 數(shù)據(jù)類型只能用于 OUTPUT 參數(shù)匾委。如果指定的數(shù)據(jù)類型為 cursor,也必須同時指定 VARYING 和 OUTPUT 關鍵字氓润。有關 SQL Server 提供的數(shù)據(jù)類型及其語法的更多信息,請參見數(shù)據(jù)類型薯鳍。
說明 對于可以是 cursor 數(shù)據(jù)類型的輸出參數(shù)咖气,沒有最大數(shù)目的限制。
5.VARYING: 指定作為輸出參數(shù)支持的結果集(由存儲過程動態(tài)構造挖滤,內容可以變化)崩溪。僅適用于游標參數(shù)。
6.default: 參數(shù)的默認值斩松。如果定義了默認值伶唯,不必指定該參數(shù)的值即可執(zhí)行過程。默認值必須是常量或 NULL惧盹。如果過程將對該參數(shù)使用 LIKE 關鍵字乳幸,那么默認值中可以包含通配符(%、_钧椰、[] 和 [^])粹断。
7.OUTPUT :表明參數(shù)是返回參數(shù)。該選項的值可以返回給 EXEC[UTE]嫡霞。使用 OUTPUT 參數(shù)可將信息返回給調用過程瓶埋。Text昔头、ntext 和 image 參數(shù)可用作 OUTPUT 參數(shù)果正。使用 OUTPUT 關鍵字的輸出參數(shù)可以是游標占位符。
8.RECOMPILE: 表明 SQL Server 不會緩存該過程的計劃斩披,該過程將在運行時重新編譯端姚。在使用非典型值或臨時值而不希望覆蓋緩存在內存中的執(zhí)行計劃時晕粪,請使用 RECOMPILE 選項。
9.ENCRYPTION: 表示 SQL Server 加密 syscomments 表中包含 CREATE PROCEDURE 語句文本的條目寄锐。使用 ENCRYPTION 可防止將過程作為 SQL Server 復制的一部分發(fā)布兵多。 說明 在升級過程中尖啡,SQL Server 利用存儲在 syscomments 中的加密注釋來重新創(chuàng)建加密過程。
10.FOR REPLICATION :指定不能在訂閱服務器上執(zhí)行為復制創(chuàng)建的存儲過程剩膘。.使用 FOR REPLICATION 選項創(chuàng)建的存儲過程可用作存儲過程篩選衅斩,且只能在復制過程中執(zhí)行。本選項不能和 WITH RECOMPILE 選項一起使用怠褐。
11.AS :指定過程要執(zhí)行的操作畏梆。
12.sql_statement :過程中要包含的任意數(shù)目和類型的 Transact-SQL 語句。但有一些限制奈懒。