標籤:操作 create sql語句 防止 優勢 覆蓋 [] default 緩衝
什麼是預存程序:
預存程序可以說是一個記錄集吧,它是由一些T-SQL語句組成的代碼塊,這些T-SQL語句代碼像一個方法一樣實現一些功能(對單表或多表的增刪改查),然後再給這個代碼塊取一個名字,在用到這個功能的時候調用他就行了。
預存程序的優勢:
1.由於資料庫執行動作時,是先編譯後執行的。然而預存程序是一個編譯過的代碼塊,所以執行效率要比T-SQL語句高。
2.一個預存程序在程式在網路中互動時可以替代大堆的T-SQL語句,所以也能降低網路的通訊量,提高通訊速率。
3.通過預存程序能夠使沒有許可權的使用者在控制之下間接地存取資料庫,從而確保資料的安全。
預存程序的基本文法:
--------------建立預存程序-----------------
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 ‘‘ --預存程序如果有參數,後面加參數格式為:@參數名=value,也可直接為參數值value
--------------刪除預存程序-----------------
drop procedure procedure_name --在預存程序中能調用另外一個預存程序,而不能刪除另外一個預存程序
建立預存程序的參數:
1.procedure_name :預存程序的名稱,在前面加#為局部暫存預存程序,加##為全域暫存預存程序。
2.; number:是可選的整數,用來對同名的過程分組,以便用一條 DROP PROCEDURE 語句即可將同組的過程一起除去。例如,名為 orders 的應用程式使用的過程可以命名為 orderproc;1、orderproc;2 等。DROP PROCEDURE orderproc 語句將除去整個組。如果名稱中包含定界標識符,則數字不應包含在標識符中,只應在 procedure_name 前後使用適當的定界符。
3.@parameter: 預存程序的參數。可以有一個或多個。使用者必須在執行過程時提供每個所聲明參數的值(除非定義了該參數的預設值)。預存程序最多可以有 2.100 個參數。
使用 @ 符號作為第一個字元來指定參數名稱。參數名稱必須符合標識符的規則。每個過程的參數僅用於該過程本身;相同的參數名稱可以用在其它過程中。預設情況下,參數只能代替常量,而不能用於代替表名、列名或其它資料庫物件的名稱。有關更多資訊,請參見 EXECUTE。
4.data_type:參數的資料類型。所有資料類型(包括 text、ntext 和 image)均可以用作預存程序的參數。不過,cursor 資料類型只能用於 OUTPUT 參數。如果指定的資料類型為 cursor,也必須同時指定 VARYING 和 OUTPUT 關鍵字。有關 SQL Server 提供的資料類型及其文法的更多資訊,請參見資料類型。
說明 對於可以是 cursor 資料類型的輸出參數,沒有最大數目的限制。
5.VARYING: 指定作為輸出參數支援的結果集(由預存程序動態構造,內容可以變化)。僅適用於遊標參數。
6.default: 參數的預設值。如果定義了預設值,不必指定該參數的值即可執行過程。預設值必須是常量或 NULL。如果過程將對該參數使用 LIKE 關鍵字,那麼預設值中可以包含萬用字元(%、_、[] 和 [^])。
7.OUTPUT :表明參數是返回參數。該選項的值可以返回給 EXEC[UTE]。使用 OUTPUT 參數可將資訊返回給調用過程。Text、ntext 和 image 參數可用作 OUTPUT 參數。使用 OUTPUT 關鍵字的輸出參數可以是遊標預留位置。
8.RECOMPILE: 表明 SQL Server 不會緩衝該過程的計劃,該過程將在運行時重新編譯。在使用非典型值或臨時值而不希望覆蓋緩衝在記憶體中的執行計畫時,請使用 RECOMPILE 選項。
9.ENCRYPTION: 表示 SQL Server 加密 syscomments 表中包含 CREATE PROCEDURE 語句文本的條目。使用 ENCRYPTION 可防止將過程作為 SQL Server 複製的一部分發布。 說明 在升級過程中,SQL Server 利用儲存在 syscomments 中的加密注釋來重新建立加密過程。
10.FOR REPLICATION :指定不能在訂閱伺服器上執行為複製建立的預存程序。.使用 FOR REPLICATION 選項建立的預存程序可用作預存程序篩選,且只能在複製過程中執行。本選項不能和 WITH RECOMPILE 選項一起使用。
11.AS :指定過程要執行的操作。
12.sql_statement :過程中要包含的任意數目和類型的 Transact-SQL 陳述式。但有一些限制。
執行個體:
-------------建立名為GetUserAccount的預存程序----------------create Procedure GetUserAccount@UserName nchar(20),@UserID int outputasif(@UserName>5)select @UserID=COUNT(*) from UserAccount where UserID>25elseset @UserID=1000select * from UserAccountreturn @@rowcountgo-------------執行上面的預存程序----------------exec GetUserAccountRe2 ‘7‘,null
返回執行 select * from UserAccount 這句代碼的結果集,同時@userID為COOUT(*)即 =1,Retun Value=9
mysql預存程序