将常用的或很複雜的工作,預先用sql語句寫好并用一個指定的名稱存儲起來, 那麼以後要叫資料庫提供與已定義好的存儲過程的功能相同的服務時,隻需調用execute,即可自動完成指令。
存儲過程的優點:
1.存儲過程隻在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般sql語句每執行一次就編譯一次,是以使用存儲過程可提高資料庫執行速度。
2.當對資料庫進行複雜操作時(如對多個表進行update,insert,query,delete時),可将此複雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。
3.存儲過程可以重複使用,可減少資料庫開發人員的工作量
4.安全性高,可設定隻有某此使用者才具有對指定存儲過程的使用權
建立存儲過程:
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.選擇表中所有内容并傳回一個資料集:
2.根據傳入的參數進行查詢并傳回一個資料集:
3.帶有輸出參數的存儲過程(傳回前兩條記錄的id的和)
本文來自百度文庫。