可能有不少朋友使用sql server做開發也已經有段日子,但還沒有或者很少在專案中使用儲存過程,或許有些朋友認為根本沒有必要使用儲存過程等等。其實當你乙個專案做完到了維護階段時,就會發現儲存過程給我們帶來了好處了,修改方便,不能去改我們的應用程式,只需要改儲存過程的內容,而且還可以使我們的程式速度得到提高。
quote:
sql server 聯機叢書中的定義:
儲存過程是儲存起來的可以接受和返回使用者提供的引數的 transact-sql 語句的集合。
可以建立乙個過程供永久使用,或在乙個會話中臨時使用(區域性臨時過程),或在所有會話中臨時使用(全域性臨時過程)。
也可以建立在 microsoft sql server 啟動時自動執行的儲存過程。
要使用儲存過程,首先我們必需熟悉一些基本的t-sql語句,因為儲存過程是由於一組t-sql語句構成的,並且,我們需要了解一些關於函式、過程的概念,因為我們需要在應用程式中呼叫儲存過程,就像我們呼叫應用程式的函式一樣,不過呼叫的方法有些不同。
下面我們來看一下儲存過程的建立和使用方法。
一、建立儲存過程
和資料表一樣,在使用之前我們需要建立儲存過程,它的簡明語法是:
quote:
create proc 儲存過程名稱
[引數列表(多個以「,」分隔)]
assql 語句 例:
quote:
create proc upgetusername
@intuserid int,
@ostrusername nvarchar(20)
output
-- 要輸出的引數
asbegin
-- 將uname的值賦給 @ostrusername 變數,即要輸出的引數
select @ostrusername=uname from uuser where uid=@intuserid
end其中 create proc 語句(完整語句為create procedure)的意思就是告訴sql server,現在需要建立乙個儲存過程,upgetusername 就是儲存過程名稱,@intuserid 和 @ostrusername 分別是該儲存過程的兩個引數,注意,在sql server中,所有使用者定義的變數都以「
@」開頭,
output關鍵字表示這個引數是用來輸出的,
as之後就是儲存過程內容了。只要將以上**在「查詢分析器」裡執行一次,sql server就會在當前資料庫中建立乙個名為「upgetusername」的儲存過程。你可以開啟「企業管理器」,選擇當前操作的資料庫,然後在左邊的樹型列表中選擇「儲存過程」,此時就可以在右邊的列表中看到你剛剛建立的儲存過程了(如果沒有,重新整理一下即可)。
二、儲存過程的呼叫
之前我們已經建立了乙個名為「upgetusername」的儲存過程,從字面理解該儲存過程的功能是用來取得某乙個使用者的名稱。儲存過程建立好了,接下來就是要在應用程式裡呼叫了,下面看一下在asp程式裡的呼叫。
quote:
dim adocomm
'// 建立乙個物件,我們用來呼叫儲存過程
set adocomm = createobject("adodb.command")
with adocomm
'// 設定連線,設 adoconn 為已經連線的 adodb.connection 物件
.activeconnection = adoconn
'// 型別為儲存過程,adcmdstoredproc = 4
.commandtype = 4
'// 儲存過程名稱
.commandtext = "upgetusername"
'// 設定使用者編號
.parameters.item("@intuserid").value = 1
'// 執行儲存過程
.execute
'// 取得從儲存過程返回的使用者名稱
response.write "使用者名稱:" & .parameters.item("@ostrusername").value
end with
'// 釋放物件
set adocomm = nothing
通過以上兩步,我們已經可以建立和使用簡單的儲存過程了。下面我們來看乙個稍微複雜點的儲存過程,以進一步了解儲存過程的應用。
三、儲存過程的實際應用
使用者登入在asp專案中經常會使用到,相信很多朋友也都做過類似的系統,但使用儲存過程來做驗證朋友可能不多,那麼我們就以它來做例子,寫乙個簡單的使用者登入驗證的儲存過程。
quote:
create proc upuserlogin
@strloginname nvarchar(20),
@strloginpwd nvarchar(20),
@blnreturn bit output
as-- 定義乙個臨時用來儲存密碼的變數
declare @strpwd nvarchar(20)
begin
-- 從表中查詢當前使用者的密碼,賦值給 @strpwd 變數,下面要對他進行比較
select @strpwd=uloginpwd from uuser where uloginname=@strloginname
if @strloginpwd = @strpwd
begin
set @blnreturn = 1
-- 更新使用者最後登入時間
update uuser set ulastlogin=getdate() where uloginname=@strloginname
endelse
set @blnreturn = 0
end使用者登入的儲存過程建立好了,現在在程式裡試一下吧。注意,在乙個區域內如果有多條語句時,必需使用
begin...end關鍵字。
quote:
dim adocomm
'// 建立乙個物件,我們用來呼叫儲存過程
set adocomm = createobject("adodb.command")
with adocomm
'// 設定連線,設 adoconn 為已經連線的 adodb.connection 物件
.activeconnection = adoconn
'// 型別為儲存過程,adcmdstoredproc = 4
.commandtype = 4
'// 儲存過程名稱
.commandtext = "upuserlogin"
'// 設定登入名稱
.parameters.item("@strloginname").value = "admin"
'// 設定登入密碼
.parameters.item("@strloginpwd").value = "123456"
'// 執行儲存過程
.execute
'// 判斷是否登入成功
if .parameters.item("@blnreturn").value = 1 then
response.write "恭喜你,登入成功!"
else
response.write "不是吧,好像錯了哦。。。"
end if
end with
'// 釋放物件
set adocomm = nothing
通過以上的步驟,簡單使用者登入驗證過程也做完了,現在只要把它整合到程式中就可以實現簡單的使用者登入驗證了,關於其他細節就由你自己來處理了。
上面介紹的兩個儲存過程都是只返回乙個值的,下面我們來看乙個返回乙個記錄集的儲存過程。
quote:
create proc upgetuserinfos
@intusergroup int
asbegin
-- 從資料庫中抽取符合條件的資料
select uname,ugroup,ulastlogin from uuser where ugroup=@intusergroup
-- 插入一列合計
union
select '合計人數:',count(ugroup),null from uuser where ugroup=@intusergroup
end現在我們來看一下asp程式的呼叫。
quote:
dim adocomm
dim adort
'// 建立乙個物件,我們用來呼叫儲存過程
set adocomm = createobject("adodb.command")
set adors = createobject("adodb.recordset")
with adocomm
'// 設定連線,設 adoconn 為已經連線的 adodb.connection 物件
.activeconnection = adoconn
'// 型別為儲存過程,adcmdstoredproc = 4
.commandtype = 4
'// 儲存過程名稱
.commandtext = "upgetuserinfos"
'// 設定使用者組
.parameters.item("@intusergroup").value = 1
'// 執行儲存過程,和以上幾個例子不同,這裡使用recordset的open方法
adors.
open adocomm
'// 顯示第乙個值
response.write adors.fields(0).value
end with
'// 釋放物件
set adors = nothing
set adocomm = nothing
怎麼樣,是不是也很簡單呢,不過儲存過程的用處不僅僅只有這些,他還有更強大的功能,比如使用游標、臨時表來從多個表,甚至是多個資料庫中呼叫資料,然後返回給使用者,這些你可以在使用過程中慢慢的去發掘。
ADO呼叫儲存過程例項講解
1 直接有返回值的儲存過程 public string getprojectcode 或者直接以sql的形式呼叫 public string getprojectcode 呼叫無引數的儲存過程,直接呼叫儲存過程的返回值 public static datatable pro categorys pr...
案例講解 儲存過程
一 建立儲存過程實現傳入使用者名稱和密碼,插入到admin表中 create procedure test pro1 in username varchar 20 in loginpwd varchar 20 begin insert into admin admin.username,passwo...
儲存過程例項
首先查詢,如果有則更新,如果沒有則新增。create proc sp drugstockrecord drugid int,department varchar 500 batchnum varchar 500 amount float,stocktime datetime,producedate ...