學習使用儲存過程(stored procedure),是asp程式設計師的必須課之一。
所有的大型資料庫都支援儲存過程,比如oracle、ms sql等,(但ms access不支援,不過,在access裡可以使用引數化的查詢)。
儲存過程是利用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這一引數輸出給呼叫這一儲存過程的程式
使用儲存過程有許多好處,它可以封裝複雜的資料邏輯,充分發揮大型資料庫本身的優勢。
我們知道,asp並不適合做複雜的資料運算,而通過old db訪問資料庫,由於資料需要在asp和資料庫之間傳遞,相當消耗系統資源。
事實上,如果資料庫僅僅起著資料儲存的作用,那麼它的功能是遠遠沒有得到利用的。
本文介紹儲存過程如何在asp中運用。
簡單的乙個sql語句:
select id,name,picture,time,duty from employ
我們可以建立乙個儲存過程:
create procedure sp_employ
as select id,name,picture,time,duty from employ
go 而sql語句:
select id,name,picture,time,duty from employ where id=10230
對應的儲存過程是:(用alter替換我們已有的儲存過程)
alter procedure sp_employ
@inid int
as select id,name,picture,time,duty from employ where id=@inid
go 下面對比一下sql和儲存過程在asp中的情況。首先看看直接執行sql的情況:
<%
dim conn, strsql, rs
set conn = server.createobject("adodb.connection")
conn.open "dsn=webdata;uid=user;pwd=password"
strsql = "select id,name,picture,time,duty from employ "
set rs = conn.execute(strsql)
%>
再看看如何執行stored procedure:
<%
dim conn, strsql, rs
set conn = server.createobject("adodb.connection")
conn.open "dsn=webdata;uid=user;pwd=password" 』make connection
strsql = "sp_employ"
set rs = conn.execute(strsql)
%>
而執行帶引數的stored procedure也是相當類似的:
<%
dim conn, strsql, rs, myint
myint = 1
set conn = server.createobject("adodb.connection")
conn.open "dsn=webdata;uid=user;pwd=password"
strsql = "sp_mystoredprocedure " & myint
set rs = conn.execute(strsql)
%>
在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為輸出引數,用來承接我們所要的結果
在asp中呼叫儲存過程
<%
dim obj**n
dim objcmd
dim rs
const o_id=112
'-----建立connection物件----------
set obj**n=server.createobject("adodb.connection")
obj**n.open "driver=;server=localhost;uid=sa;pwd=**ca***;database=check;"
'-----建立***mand物件-----------
set objcmd=server.createobject("adodb.***mand")
objcmd.activeconnection=obj**n
objcmd.***mandtext="order_tot_amt" '指定儲存過程名稱
objcmd.***mandtype=adcmdstoredproc '其為stored procedure
'-----準備stored procedure 的引數-------
objcmd.createparameter("o_id",adinteger,adparaminput,,o_id)
objcmd.createparameter("p_tot",adbigint,adparamoutput,,0)
'-----執行儲存過程----------------------
objcmd.execute
'-----輸出引數以及處理結果--------------
for each parm in objcmd.parameters
response.write parm.name &"="& trim(parm) &"
" next
%>
ASP中使用儲存過程
學習使用儲存過程 stored procedure 是asp程式設計師的必須課之一。所有的大型資料庫都支援儲存過程,比如oracle ms sql等,但ms access不支援,不過,在access裡可以使用引數化的查詢 儲存過程是利用sql server所提供的tranact sql語言所編寫的程...
在ASP中使用儲存過程
學習使用儲存過程 stored procedure 是asp程式設計師的必須課之一。所有的大型資料庫都支援儲存過程,比如oracle ms sql等,但ms access不支援,不過,在access裡可以使用引數化的查詢 使用儲存過程有許多好處,它可以封裝複雜的資料邏輯,充分發揮大型資料庫本身的優勢...
在ASP中使用儲存過程
學習使用儲存過程 stored procedure 是asp程式設計師的必須課之一。所有的大型資料庫都支援儲存過程,比如oracle ms sql等,但ms access不支援,不過,在access裡可以使用引數化的查詢 使用儲存過程有許多好處,它可以封裝複雜的資料邏輯,充分發揮大型資料庫本身的優勢...