1. 只返回單一記錄集的儲存過程
/*sp1*/
create procedure dbo.getuserlist
asset nocount on
begin
select * from dbo.[userinfo]
endgo
以上儲存過程取得userinfo表中的所有記錄,返回乙個記錄集。通過command物件呼叫該儲存過程的asp**如下:
'**通過command物件呼叫儲存過程**
dim mycomm,myrst
set mycomm = server.createobject("adodb.command")
mycomm.activeconnection = myconstr 'myconstr是資料庫連線字串
mycomm.commandtext = "getuserlist" '指定儲存過程名
mycomm.commandtype = 4 '表明這是乙個儲存過程
mycomm.prepared = true '要求將sql命令先行編譯
set myrst = mycomm.execute
set mycomm = nothing
儲存過程取得的記錄集賦給myrst,接下來,可以對myrst進行操作。
在以上**中,commandtype屬性表明請求的型別,取值及說明如下:
-1 表明commandtext引數的型別無法確定
1 表明commandtext是一般的命令型別
2 表明commandtext引數是乙個存在的表名稱
4 表明commandtext引數是乙個儲存過程的名稱
還可以通過connection物件或recordset物件呼叫儲存過程,方法分別如下:
'**通過connection物件呼叫儲存過程**
dim myconn,myrst
set myconn = server.createobject("adodb.connection")
myconn.open myconstr 'myconstr是資料庫連線字串
set myrst = myconn.execute("getuserlist",0,4) '最後乙個參斷含義同commandtype
set myconn = nothing
'**通過recordset物件呼叫儲存過程**
dim myrst
set myrst = server.createobject("adodb.recordset")
myrst.open "getuserlist",myconstr,0,1,4
'myconstr是資料庫連線字串,最後乙個參斷含義與commandtype相同
2. 沒有輸入輸出的儲存過程
請看以下儲存過程:
/*sp2*/
create procedure dbo.deluserall
asset nocount on
begin
delete from dbo.[userinfo]
endgo
該儲存過程刪去userinfo表中的所有記錄,沒有任何輸入及輸出,呼叫方法與上面講過的基本相同,只是不用取得記錄集:
'**通過command物件呼叫儲存過程**
dim mycomm
set mycomm = server.createobject("adodb.command")
mycomm.activeconnection = myconstr 'myconstr是資料庫連線字串
mycomm.commandtext = "deluserall" '指定儲存過程名
mycomm.commandtype = 4 '表明這是乙個儲存過程
mycomm.prepared = true '要求將sql命令先行編譯
mycomm.execute '此處不必再取得記錄集
set mycomm = nothing
當然也可通過connection物件或recordset物件呼叫此類儲存過程,不過建立recordset物件是為了取得記錄集,在沒有返回記錄集的情況下,還是利用command物件吧。
3. 有返回值的儲存過程
在進行類似sp2的操作時,應充分利用sql server強大的事務處理功能,以維護資料的一致性。並且,我們可能需要儲存過程返回執**況,為此,將sp2修改如下:
/*sp3*/
create procedure dbo.deluserall
asset nocount on
begin
begin transaction
delete from dbo.[userinfo]
if @@error=0
begin
commit transaction
return 1
endelse
begin
rollback transaction
return 0
end
return
endgo
以上儲存過程,在delete順利執行時,返回1,否則返回0,並進行回滾操作。為了在asp中取得返回值,需要利用parameters集合來宣告引數:
在mycomm.createparameter("return",2,4)中,各引數的含義如下:
第乙個引數("reture")為引數名。引數名可以任意設定,但一般應與儲存過程中宣告的引數名相同。此處是返回值,我習慣上設為"reture";
adbigint: 20 ;
adbinary : 128 ;
adboolean: 11 ;
adchar: 129 ;
addbtimestamp: 135 ;
adempty: 0 ;
adinteger: 3 ;
adsmallint: 2 ;
adtinyint: 16 ;
advarchar: 200 ;
對於返回值,只能取整形,且-1到-99為保留值;
第三個引數(4),表明引數的性質,此處4表明這是乙個返回值。此引數取值的說明如下:
0 : 型別無法確定; 1: 輸入引數;2: 輸入引數;3:輸入或輸出引數;4: 返回值
以上給出的asp**,應該說是完整的**,也即最複雜的**,其實
可以簡化為
Oracle儲存過程返回記錄集
oracle的儲存過程返回記錄集,關鍵之處是要用游標。關於資料庫的游標 cursor 大家肯定都接觸不少,我們可以通過open,fetch,close操作控制游標進行各種方便的操作,這方面的例子我就不在重複了。我們現在要介紹的是游標變數 cursor variable 類似游標,游標變數也是指向乙個...
oracle的儲存過程返回記錄集
oracle的儲存過程返回記錄集 oracle的儲存過程返回記錄集,關鍵之處是要用游標。關於資料庫的游標 cursor 大家肯定都接觸不少,我們可以通過open,fetch,close操作控制游標進行各種方便的操作,這方面的例子我就不在重複了。我們現在要介紹的是游標變數 cursor variabl...
儲存過程返回記錄集總數,及輸出。
在查詢分析器中執行建立儲存過程 create procedure recordcount strwhere nvarchar 500 count int output as declare sqlstr nvarchar 1000 if strwhere set sqlstr n select co...