ASP呼叫儲存過程 只返回單一記錄集的儲存過程

2021-05-22 12:29:17 字數 3218 閱讀 4236

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...