存儲過程
存儲過程(procedure) 類似C語言中的函數,用來執行管理任務或應用複雜的業務規則。
存儲過程的優點
1.執行速度更快
2.允許模塊化程序設計
3.提高系統安全
4.減少網絡流通量
存儲過程的分類
1.系統存儲過程:由系統定義,存放在master數據庫中,以"sp_" 或 "xp_"開頭
2.用戶自定義存儲過程:由用戶在自己的數據庫中創建的存儲過程。
常用的系統存儲過程
sp_databases:列出服務器上的所有數據庫。
sp_helpdb:報告有關指定數據庫或所有數據庫的信息。
sp_renamedb;更改數據庫的名稱。
sp_tables:返回當前環境下可查詢的對象的列表。
sp_columns:返回某個表的列的信息。
sp_help:查看某個表的所有信息。
sp_helpconstraint:查看某個表的約束。
sp_helpindex:查看某個表的索引。
sp_stored_procedures:列出當前環境中的所有存儲過程。
sp_password:添加或修改登錄賬戶的密碼。
sp_helptext:顯示默認值,未加密的存儲過程,用戶定義的存儲過程,觸發器或視圖的實際爲本。
定義存儲過程的語法
create prco[edure] 存儲過程名稱
@參數1 數據類型=默認值 output, //output指示參數爲輸出參數
....,
@參數n 數據類型=默認值 output
as
SQL語句
go
存儲過程的調用
exec 存儲過程的名稱 @參數名 output,@參數名=值,......
或者
exec 存儲過程名稱
或者
exec 存儲過程名稱 值1,值2,.....,值n
刪除存儲過程
drop 存儲過程名稱
處理存儲過程中的錯誤
raiserror (msgid|msg_str,severity,state with option[1,...,n])
msgid:在sysmessages系統表中指定用戶定義錯誤信息。
msg_str:用戶定義的特定信息,最長255個字符。
severity:定義嚴重性級別。用戶可使用級別爲0-18級。
state:表示錯誤狀態。1-127
option:指示是否將錯誤記錄到服務器錯誤日誌中。
例:
create prco prco_stu
@notpassSum int output, --輸出參數
@writtenPass int=60,
@labPass int=60
as
if (not @writtenPass between 0 and 100) or (not @labPass between 0 and 100)
begin
raiserror('及格線錯誤,請指定0-100之間的分數,統計中斷退出',16,1)
return --立即返回,退出存儲過程
end
SQL中聲明一個參數
declare 參數名 數據類型