原文:
sql——儲存過程
1. 為什麼使用儲存過程
應用程式通過t-sql語句到伺服器的過程是不安全的。
1) 資料不安全
2)每次提交sql**都要經過語法編譯後在執行,影響應用程式的執行效能
3) 網路流量大
2. 什麼是儲存過程
儲存過程是sql語句和控制語句的預編譯集合,儲存在資料庫裡,可由應用程式呼叫執行,而且允許使用者宣告變數、邏輯控制語句及其他強大的程式設計功能。儲存在sqlserver中,通過名稱和引數執行,也可一返回結果。對於儲存過程我更傾向於把他理解成方法。它裡面可以只有一條查詢語句,也可以包含一系列使用控制流的sql語句。
3. 儲存過程的優點
1) 模組化呈現設計
2) 執行速度快,效率高
3) 減少網路流量
4) 具有良好的安全性
4. 儲存過程的分類
1)系統儲存過程
2)擴充套件儲存過程(屬於系統儲存過程的一種)
3)使用者自定義儲存過程
5. 系統儲存過程
它一般以"sp_"開頭,是由sql server建立、管理和使用,它存放在resource資料庫中。類似c#語言類庫中的方法,暫時先不考慮它是如何編寫的,先了解常用的系統儲存過程及呼叫方法。
呼叫方法:exec[ute] 儲存過程名 [引數值]
6. 常用的擴充套件儲存過程 xp_cmdshell
xp_cmdshell 它可以完成dos命令下的一些操作。
exec xp_cmdshell dos命令 [no_output]
說明 no_output是可選引數,表示設定執行dos命令後是否輸出返回資訊。
示例: exec xp_cmdshell 'mkdir d:\newdir' output
強調: 因為使用者可以通過xp_cmdshell對作業系統做一些操作,如果該儲存過程被黑客使用對作業系統做操作就麻煩了,所以通常會把xp_cmdshell 關閉掉:
方法一:
sql server 2008版本及以上, 通過資料庫右擊 選擇「方面」 ,在下拉列表中選擇 「伺服器安全『 , 下面的列表項中可以看到xmcmdshellenable 設定。
sql server2005版本及以下,通過開始- sqlserver- 外圍裝置查詢
方法二:
關閉xp_cmdshell
exec sp_configure 'show advanced options', 1;
reconfigure;
exec sp_configure 'xp_cmdshell', 1;
reconfigure;
開啟xp_cmdshell
exec sp_configure 'show advanced options', 1;
reconfigure;
exec sp_configure 'xp_cmdshell', 0;
reconfigure;
7. 使用者自定義儲存過程
語法:create proc[edure] 儲存過程名
@引數1 資料型別 = 預設值 output,
……@引數n 資料型別 = 預設值 output
as
go
乙個完成的儲存過程包含以下3部分:
1) 輸入引數、輸出引數
2) 在儲存過程中執行的t-sql語句
3) 儲存過程的返回值
其中輸入引數允許有預設值。
刪除儲存過程
drop proc 儲存過程名
if exists (select * from sysobject where name = 儲存過程名)
drop proc 儲存過程名
go
8. 注意事項
儲存過程的宣告: 輸入引數可以有預設值,輸出引數也可以有預設值
create proc usp_name
@age int = 5,
@name varchar(10)
as ……
go執行語句:
exec pr_name 18 , 'zm'
exec default , 'zm'
exec @name = 'zm'
說明: 為了呼叫方便,最好將有預設值的儲存過程引數列表放到最後。
帶輸出引數的儲存過程
create proc usp_name
@num1 int,
@sum int output
as
go 呼叫儲存過程
declare @sum int
exec usp_name 5, @sum output
注意, 呼叫帶有輸出引數的儲存過程引數後面必須帶output關鍵字
9. 處理儲存過程中的錯誤
raiserror ( [with option [,……]])
其中:msg_id: 在sysmessage系統表中指定使用者定義錯誤資訊
msg_str: 使用者定義的特定資訊,最長為255個字元
serverity: 與特定資訊相關聯,表示使用者定義的嚴重性級別。使用者可選用的級別是0~18。數字越大,表示越嚴重。
state : 表示錯誤的狀態, 1~255中的值
option: 錯誤的自定義選項,可以使一下任意一值
log: 在microsoft sql server 資料庫引擎示例的錯誤日誌和應用程式日誌中記錄錯誤
nowait:將訊息立即傳送給客戶端
seterror:將@@error值和 error_number 值設定為msg_id 或5000, 不用考慮嚴重級別。
例如: raiserror ('錯誤資訊', 16,1)
SQL儲存過程
什麼是儲存過程呢?定義 將常用的或很複雜的工作,預先用sql語句寫好並用乙個指定的名稱儲存起來,那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫execute,即可自動完成命令。講到這裡,可能有人要問 這麼說儲存過程就是一堆sql語句而已啊?microsoft公司為什麼還要新增...
sql儲存過程
概念 sql server提供了一種方法,它可以將一些固定的操作集中起來由sql server資料庫伺服器來完成,以實現某個任務,這種方法就是儲存過程。儲存過程是sql語句和可選控制流語句的預編譯集合,儲存過程在資料庫中可由應用程式通過乙個呼叫執行,而且允許使用者申明變數 有條件的執行以及其它強大的...
SQL儲存過程
儲存過程 1.返回值 create proc example4 as begin declare 返回值 int select 返回值 sum 庫存量 from 產品 return 返回值 endgo 接受這個返回值必須要用變數來接收,如 declare 接收值 int exec 接收值 examp...