學習使用儲存過程(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和資料庫之間傳遞,相當消耗系統資源。
事實上,如果資料庫僅僅起著資料儲存的作用,那麼它的功能是遠遠沒有得到利用的。
關於如何建立儲存過程,請參考ms sql的相關文件。
本文介紹儲存過程如何在asp中運用。
簡單的乙個sql語句:
select id,name,picture,time,duty from employ
我們可以建立乙個儲存過程:
create procedure sp_employ
asselect 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
asselect 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中呼叫儲存過程
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裡可以使用引數化的查詢 使用儲存過程有許多好處,它可以封裝複雜的資料邏輯,充分發揮大型資料庫本身的優勢...