什麼是儲存過程呢?
定義:
將常用的或很複雜的工作,預先用sql語句寫好並用乙個指定的名稱儲存起來, 那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫execute,即可自動完成命令。
講到這裡,可能有人要問:這麼說儲存過程就是一堆sql語句而已啊?
microsoft公司為什麼還要新增這個技術呢?
那麼儲存過程與一般的sql語句有什麼區別呢?
儲存過程的優點:
1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般sql語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度。
2.當對資料庫進行複雜操作時(如對多個表進行update,insert,query,delete時),可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。
3.儲存過程可以重複使用,可減少資料庫開發人員的工作量
4.安全性高,可設定只有某此使用者才具有對指定儲存過程的使用權
儲存過程的種類:
1.系統儲存過程:以sp_開頭,用來進行系統的各項設定.取得資訊.相關管理工作,如 sp_help就是取得指定物件的相關資訊
2.擴充套件儲存過程 以xp_開頭,用來呼叫作業系統提供的功能
exec master..xp_cmdshell 'ping
10.8.16.1'
3.使用者自定義的儲存過程,這是我們所指的儲存過程
常用格式
create procedure procedue_name
[@parameter data_type][output]
[with]
as sql_statement
解釋:
output:表示此引數是可傳回的
with
recompile:表示每次執行此儲存過程時都重新編譯一次
encryption:所建立的儲存過程的內容會被加密
如: 表book的內容如下
編號 書名 **
001 c語言入門 $30
002 powerbuilder報表開發 $52
例項1:查詢表book的內容的儲存過程
create proc query_book
as select * from book
go exec query_book
例項2:加入一筆記錄到表book,並查詢此表中所有書籍的總金額
create proc insert_book
@param1 char(10),@param2 varchar(20),@param3 money,@param4 money output
with encryption ---------加密
as insert book(編號,書名,**)
values(@param1,@param2,@param3)
select @param4=sum(**
) from book
go
執行例子
: declare @total_price money
exec insert_book '003','delphi 控制項開發指南
',$100,@total_price
print '總金額為
'+convert(varchar,@total_price)
go儲存過程的3種傳回值
:1.以return傳回整數
2.以output格式傳回引數
3.recordset
傳回值的區別
:output和return都可在批次程式中用變數接收,而recordset則傳回到執行批次的客戶端中
例項3:設有兩個表為product,order,其表內容如下:
product
產品編號 產品名稱 客戶訂數
001 鋼筆
30
002 毛筆
50
003 鉛筆
100
order
產品編號 客戶名 客戶訂金
001
南山區$30
002 羅湖區
$50003 寶安區
$4請實現按編號為連線條件,將兩個表連線成乙個臨時表,該錶只含編號.產品名.客戶名.訂金.總金額
,總金額=訂金*訂數,臨時表放在儲存過程中
**如下
:create proc temp_sal as
select a.產品編號,a.產品名稱,b.客戶名,b.客戶訂金,a.客戶訂數* b.客戶訂金 as總金額
into #temptable from product a inner join order b on a.
產品編號=b.產品編號
if @@error=0
print 'good'
else
print 'fail'
go
sql儲存過程
概念 sql server提供了一種方法,它可以將一些固定的操作集中起來由sql server資料庫伺服器來完成,以實現某個任務,這種方法就是儲存過程。儲存過程是sql語句和可選控制流語句的預編譯集合,儲存過程在資料庫中可由應用程式通過乙個呼叫執行,而且允許使用者申明變數 有條件的執行以及其它強大的...
SQL儲存過程
儲存過程 1.返回值 create proc example4 as begin declare 返回值 int select 返回值 sum 庫存量 from 產品 return 返回值 endgo 接受這個返回值必須要用變數來接收,如 declare 接收值 int exec 接收值 examp...
SQL儲存過程
在大型資料庫系統中,儲存過程和觸發器具有很重要的作用。無論是儲存過程還是觸發器,都是sql 語句和流程控制語句的集合。就本質而言,觸發器也是一種儲存過程。儲存過程在運算時生成執行方式,所以,以後對其再執行時其執行速度很快。sql server 2000 不僅提供了使用者自定義儲存過程的功能,而且也提...