4存储过程
4.1存儲過程
存儲過程概念
是一門結構的語言,用函數可以提高代碼的重用性(反復使用),方便模塊化設計,提高執行
效率。
?4.1.1什么是存儲過程
??????? 是SQL查詢語句與控制流程語句的預編譯集合,并以特定的名稱保存在數據庫中。數據庫也
是數據庫對象。
?? 存儲過程分為系統存儲過程和用戶自定義存儲過程
???????? (1)系統存儲過程:
????????????? 1.它是一組預編譯的T-SQL語句,系統存儲過程提供了管理數據庫和更新數據表的機
制。主要用途是充當管理和檢索系統信息的快捷方式。
????????????? 2.由系統定義,存放在master數據庫中
????????????? 3.類似C語言中的系統函數
????????????? 4.系統存儲過程的名稱都以“sp_”開頭或”xp_”開頭
????????? 注釋:xp_開頭的存儲過程是擴展的存儲過程。
???????? (2)用戶自定義存儲過程:
?????????????? 1.是開發人員自行定義的存儲過程,所實現的功能完全由開發人員自行設計與編寫
。
?????????????? 2.由用戶在自己的數據庫中創建的存儲過程
?????????????? 3.類似C語言中的用戶自定義函數
4.1.2存儲過程的優點
???????? 1.執行速度快,效率高(編譯執行)。
???????? 2.模塊式編程(多次被調用,提高程序的可移植性)。
???????? 3.減少網絡流量(只需要使用一個存儲過程名及參數,提高運行速度)。
???????? 4.提高安全性(對不同權限的用戶使用不同的存儲過程)。
常用的系統存儲過程
| 系統存儲過程 | 說明 | 語法 |
| sp_columns | 查看指定列表的信息 | execute sp_columns '表格' |
| sp_databases | 列出服務器上的所有數據庫 | ? |
| sp_help | 查看某個表的所有信息 | ? |
| sp_helpconstraint | 查看某個表的約束 | ? |
| sp_helpdb | 列出指定數據庫或所有數據庫信息 | ? |
| sp_helptext | 顯示默認值、未加密的存儲過程、用戶定義的存儲過程、觸發 器或視圖的實際文本 | ? |
| sp_helpindex | 查看某個表的索引 | ? |
| sp_renamedb | 更改數據庫的名稱 | ? |
| sp_stored_procedures | 列出當前環境中可用的所有存儲過程 | ? |
| ? |
?
??????????????????????
?????????????????????
???????????????????
????????????????????
?????????????????????
????????????????
?????????????????????
?????????????
????????????????????
????????????
????? 4.1.3常用的系統存儲過程
????????? 常用的擴展存儲過程:xp_cmdshell
?????????? (1).可以執行DOS命令下的一些的操作
?????????? (2).以文本行方式返回任何輸出
?????????? (3). 調用語法:
?????????? (4).EXEC xp_cmdshell DOS命令 [NO_OUTPUT]
????????? 注釋:no_output表示是否輸出存儲過程返回的信息。
4.1.4如何創建存儲過程
????????? 定義存儲過程的語法
????????? (1).和C語言的函數一樣,參數可選
????????? (2).參數分為輸入參數、輸出參數(默認為輸入參數,output為輸出參數)
????????? (3).輸入參數允許有默認值
???????????? **如何創建如下
????????? CREATE? PROC[EDURE]? 存儲過程名
???????????? @參數1? 數據類型[= 默認值 OUTPUT]
????????????? …… ,
???????????? @參數n? 數據類型[= 默認值 OUTPUT]
????????? AS
??????????? SQL語句........
????????? GO
(4)調用存儲過程
????????? (1).EXECUTE(執行)語句用來調用存儲過程。
????????? (2).調用的語法如下:
???????????? EXECUTE? 過程名? [參數] ?
(5)不帶參的存儲過程 ?
????????? 語法:CREATE? PROC[EDURE]? 存儲過程名
??????????????? ***沒有參數
?????????????? AS
??????????????? SQL語句........
?????????????? GO
(6)帶參數的存儲過程
????????? 存儲過程的參數分兩種:
????????? ①.輸入參數
??????????? 用于向存儲過程傳入值,類似C語言的按值傳遞;
???????????? 語法: CREATE? PROC[EDURE]? 存儲過程名
??????????????????? @pcuse int
?????????????????? AS
??????????????????? SQL語句........
?????????????????? GO???????? ?
????????? ②.輸出參數
??????????? 用于在調用存儲過程后返回結果,類似C語言的按引用傳遞;
????????????? 語法:CREATE? PROC[EDURE]? 存儲過程名
?????????????????????? @pcuse int output
??????????????????? AS
???????????????????? SQL語句........
??????????????????? GO
4.1.5return的使用
????????? return關鍵字可以終止存儲過程或者返回數值
1.處理存儲過程中的錯誤
????????? (1).可以使用PRINT語句顯示錯誤信息,但這些信息是臨時的,只能顯示給用戶。
????????? (2).RAISERROR 顯示用戶定義的錯誤信息時可指定嚴重級別,設置系統變量@@ERROR記錄
所發生的錯誤等
4.1.6RAISERROR語句的用法如下:
????????? (1).msg_id:在sysmessages系統表中指定用戶定義錯誤信息
????????? (2).msg_str:用戶定義的特定信息,最長255個字符
????????? (3).severity:定義嚴重性級別。用戶可使用的級別為0–18級
????????? (4).state:表示錯誤的狀態,1至127之間的值
????????? (5).option:指示是否將錯誤記錄到服務器錯誤日志中
????????? 語法:RAISERROR (msg_id | msg_str,severity,state WITH option[,...n]])
??????????????? RAISERROR(自定義的錯誤信息,錯誤的嚴重級別,錯誤的狀態)
4.1.7T-SQL中輸出錯誤信息的方法和print輸出有什么區別?
????????? (1).用PRINT語句顯示錯誤信息,但這 些信息是臨時的,只能顯示給用戶;
????????? (2).RAISERROR 顯示用戶定義的錯誤信息時可指定嚴重級別設置系統變量@@ERROR,記錄
所發生的錯誤等
如何刪除一個存儲過程?
????????? drop 存儲過程名 刪除存儲過程
轉載于:https://www.cnblogs.com/chef5-3/archive/2013/06/13/3133515.html
總結
- 上一篇: PHP 写法
- 下一篇: zookeeper运维管理