定義:
將常用的或很複雜的工作,預先用sql語句寫好並用乙個指定的名稱儲存起來, 那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫execute,即可自動完成命令。
講到這裡,可能有人要問:這麼說儲存過程就是一堆sql語句而已啊?
microsoft公司為什麼還要新增這個技術呢?
那麼儲存過程與一般的sql語句有什麼區別呢?
儲存過程的優點:
1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般sql語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度。
2.當對資料庫進行複雜操作時(如對多個表進行update,insert,query,delete時),可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。
3.儲存過程可以重複使用,可減少資料庫開發人員的工作量
4.安全性高,可設定只有某此使用者才具有對指定儲存過程的使用權
儲存過程的種類:
如 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 羅湖區 $50
003 寶安區 $4
請實現按編號為連線條件,將兩個表連線成乙個臨時表,該錶只含編號.產品名.客戶名.訂金.總金額,
總金額=訂金*訂數,臨時表放在儲存過程中
**如下:
create proc temp_sale
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
&n bsp; print 'fail'
go 儲存過程介紹
一、先介紹一下什麼是儲存過程
儲存過程是利用sql server所提供的tranact-sql語言所編寫的程式。tranact-sql語言是sql server提供專為設計資料庫應用程式的語言,它是應用程式和sql server資料庫間的主要程式式設計介面。它好比oracle資料庫系統中的pro-sql和informix的資料庫系統能夠中的informix-4gl語言一樣。這類語言主要提供以下功能,讓使用者可以設計出符合引用需求的程式:
1)、變數說明
2)、ansi相容的sql命令(如select,update….)
3)、一般流程控制命令(if…else…、while….)
4)、內部函式
二、儲存過程的書寫格
create procedure [擁有者.]儲存過程名[;程式編號]
[(引數#1,…引數#1024)]
[with ]
[for replication]
as 程式行
其中儲存過程名不能超過128個字。每個儲存過程中最多設定1024個引數
(sql server 7.0以上版本),引數的使用方法如下:
@引數名 資料型別 [varying] [=內定值] [output]
每個引數名前要有乙個「@」符號,每乙個儲存過程的引數僅為該程式內部使用,引數的型別除了image外,其他sql server所支援的資料型別都可使用。
[=內定值]相當於我們在建立資料庫時設定乙個欄位的預設值,這裡是為這個引數設定預設值。[output]是用來指定該引數是既有輸入又有輸出值的,也就是在呼叫了這個儲存過程時,如果所指定的引數值是我們需要輸入的引數,同時也需要在結果中輸出的,則該項必須為output,而如果只是做輸出引數用,可以用cursor,同時在使用該引數時,必須指定varying和output這兩個語句。
例子:
create procedure order_tot_amt @o_id int,@p_tot int output as
select @p_tot = sum(unitprice*quantity)
from orderdetails
where ordered=@o_id
例子說明:
該例子是建立乙個簡單的儲存過程order_tot_amt,這個儲存過程根據使用者輸入的定單id號碼(@o_id),由定單明細表(orderdetails)中計算該定單銷售總額[單價(unitprice)*數量(quantity)],這一金額通過@p_tot這一引數輸出給呼叫這一儲存過程的程式
三、在sql server中執行儲存過程
在sql server的查詢分析器中,輸入以下**:
declare @tot_amt int
execute order_tot_amt 1,@tot_amt output
select @tot_amt
以上**是執行order_tot_amt這一儲存過程,以計算出定單編號為1的定單銷售金額,我們定義@tot_amt為輸出引數,用來承接我們所要的結果
sql語句執行的時候要先編譯,然後執行。儲存過程就是編譯好了的一些sql語句。用的時候直接就可以用了。
儲存過程是由流控制和sql語句書寫的過程,這個過程經編譯和優化 後儲存在資料庫伺服器中,使用時只要呼叫即可。在oracle中,若干個 有聯絡的過程可以組合在一起構成程式包。
使用儲存過程有以下的優點:
* 儲存過程的能力大大增強了sql語言的功能和靈活性。儲存過程可 以用流控制語句編寫,有很強的靈活性,可以完成複雜的判斷和較複雜的 運算。
* 可保證資料的安全性和完整性。
# 通過儲存過程可以使沒有許可權的使用者在控制之下間接地訪問資料庫,從而保證資料的安全。
# 通過儲存過程可以使相關的動作在一起發生,從而可以維護資料庫的完整性。
* 再執行儲存過程前,資料庫已對其進行了語法和句法分析,並給出 了優化執行方案。這種已經編譯好的過程可極大地改善sql語句的效能。 由於執行sql語句的大部分工作已經完成,所以儲存過程能以極快的速度執 行。
* 可以降低網路的通訊量。
* 使體現企業規則的運算程式放入資料庫伺服器中,以便:
# 集中控制。
# 當企業規則發生變化時在伺服器中改變儲存過程即可,無須修改 任何應用程式。企業規則的特點是要經常變化,如果把體現企業規則的運 算程式放入應用程式中,則當企業規則發生變化時,就需要修改應用程式 工作量非常之大(修改、發行和安裝應用程式)。如果把體現企業規則的 運算放入儲存過程中,則當企業規則發生變化時,只要修改儲存過程就可 以了,應用程式無須任何變化.
儲存過程介紹
儲存過程是一組為了完成特定功能的sql語句集,儲存在資料庫中,經過第一次編譯後再次呼叫不需要再次編譯,使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。儲存過程是資料庫中的乙個重要物件。使用儲存過程可以增強sql語言的功能和靈活性,由於可以用流程控制語句編寫儲存過程,有很強的...
xml文件儲存過程
通用的儲存,來匯入指定目錄下的所有xml文件 create proc p inport path nvarchar 1000 d xml xml檔案所在的目錄 fname nvarchar 1000 要匯入的xml檔名,如果不指定,表示只匯入今天的,如果為 則匯入該目錄下所有的檔案,如果是其他,表示...
Elasticsearch文件儲存過程
參考 es官方文件分片內部原理 es分片原理 索引的解釋 名詞的索引 指的是由多個分片組成的集合,類似於資料庫中的資料庫名稱 動詞的索引 es文件儲存的過程 1.倒排索引 為了快速的全文檢索,elasticsearch使用了倒排索引的結構,使用分析器將每篇文件的字段中的內容分詞 每乙個詞稱為term...