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