一:存儲過程的定義:
在數據庫服務器上(DB Server)存儲的預先編譯好的一堆SQL語句
是SQL語句和控制語句的預編譯集合,保存在數據庫里,可由應用程序調用執行,而且允許用戶聲明變量、邏輯控制語句及其他強大的編譯功能。它可以接收參數、輸出參數、返回單個或多個結果集及返回值。
為什么需要存儲過程???
增加數據庫的安全性
二:存儲過程的優點:
①:執行速度更快
②:允許模塊化程序設計
③:提高系統安全性
④:減少網絡流通量
三:存儲過程的分類:
1.系統存儲過程:
以“sp_”開頭,并存放在Resource數據庫中
常用的系統存儲過程:
系統存儲過程 | 說明 |
sp_databases | 列出服務器上的所有數據庫信息,包括數據庫名稱和數據庫大小 |
sp_helpdb | 報告有關指定數據庫或所有數據庫信息 |
sp_renamedb | 更改數據庫名稱 |
sp_tables | 返回當前環境下可查詢的表或視圖信息 |
sp_columns | 返回某個表或視圖的列信息,包括列的數據類型和長度等 |
sp_help | 查看某個數據庫對象的信息 |
sp_helpconstraint | 查看某個表的約束 |
sp_helpindex | 查看某個表的索引 |
sp_stored_procedures | 顯示存儲過程的列表 |
sp_password | 添加或修改登錄賬戶的密碼 |
sp_helptext | 顯示默認值,未加密的存儲過程,用戶自定義的存儲過程。觸發器或視圖的實際文本 |
語法:
exec [UTE] 存儲過程名 [參數值]
注:如果執行存儲過程的語句是批處理中的第一個語句,則可以不指定EXECUTE關鍵字
eg:
sp_databases MySchool
GO
2.常用的擴展存儲過程
語法:
exec xp_cmdshell DOS 命令[no_output]
注:exec表示調用存儲過程,no_output為可選參數,設置執行DOS命令后是否輸出返回信息
3.用戶自定義的存儲過程
創建不帶參數的存儲過程:
① 創建存儲過程
語法:
create procedure 存儲過程名 [{@參數1 數據類型} [=默認值] [output], ........, {@參數 n 數據類型} [=默認值] [output] ] as SQL語句
② 刪除存儲過程
語法:
drop procedure 存儲過程名
注:參數置于as前,并且變量前不需要加declare關鍵字
as后的變量需要declare關鍵字
eg:創建一個可以查詢所有學生信息的存儲過程
CREATE PROCEDURE AS select * from Student
創建帶輸入參數的存儲過程:
①:創建帶參數的存儲過程
如果存儲過程的參數后面有"output"關鍵字,則表示此參數為輸出參數;否則視為輸入參數,輸入參數還可以設置為默認值。
②:執行帶參數的存儲過程
語法:
exec [返回變量=] 存儲過程名 [@參數1=]參數值1 [output] |[default], ....... [@參數1=]參數值n [output] |[default]
eg:
從Result,Student表中查詢成績大于90分的學生的 姓名和成績:
四:帶output參數的存儲過程:
五:處理錯誤信息
raiserror語句:
語法:
raiserror ({msg_id | msg_str}{,severity,state} [with option[,....n]])
分析:利用raiserror語句生成用戶定義的錯誤信息并返回到應用程序。
六:補充
Truncate 與 Delete 三點區別:
1. Truncate不能加where,而delete可以
2. Truncate刪除速度快,不記錄日志。不能恢復數據
而delete刪除速度慢,記錄日志,可以恢復數據
3. Truncate 截斷表。ID從1開始編號
delete 不會從1開始編號
文章列表