返回多个记录集的存储进程
本文最先介绍的是返回记录集的存储进程。有时候,需要一个存储进程返回多个记录集,在ASP中,如何同时取得这些记录集呢?为了说明这一问题,在USERINFO表中增加两个字段:USERTEL及USERMAIL,并设定只有登录用户可以查看这两项内容。
/*SP7*/
CREATE PROCEDURE DBO.GETUSERINFO
@USERID INT,
@CHECKLOGIN BIT
AS
SET NOCOUNT ON
BEGIN
IF @USERID IS NULL OR @CHECKLOGIN IS NULL RETURN
SELECT USERNAME
FROM DBO.[USRINFO]
WHERE USERID=@USERID
--若为登录用户,取USERTEL及USERMAIL
IF @CHECKLOGIN=1
SELECT USERTEL,USERMAIL
FROM DBO.[USERINFO]
WHERE USERID=@USERID
RETURN
END
GO
以下是ASP代码:
'**调用返回多个记录集的存储进程**
DIM CHECKLG,USERID,USERNAME,USERTEL,USERMAIL
DIM MYCOMM,MYRST
USERID = 1
'CHECKLOGIN()为自定义函数,判断访问者是否登录
CHECKLG = CHECKLOGIN()
SET MYCOMM = SERVER.CREATEOBJECT("ADODB.COMMAND")
WITH MYCOMM
.ACTIVECONNECTION = MYCONSTR 'MYCONSTR是数据库连接字串
.COMMANDTEXT = "GETUSERINFO" '指定存储进程名
.COMMANDTYPE = 4 '表明这是一个存储进程
.PREPARED = TRUE '要求将SQL命令先行编译
.PARAMETERS.APPEND .CREATEPARAMETER("@USERID",3,1,4,USERID)
.PARAMETERS.APPEND .CREATEPARAMETER("@CHECKLOGIN",11,1,1,CHECKLG)
SET MYRST = .EXECUTE
END WITH
SET MYCOMM = NOTHING
'从第一个记录集中取值
USERNAME = MYRST(0)
'从第二个记录集中取值
IF NOT MYRST IS NOTHING THEN
SET MYRST = MYRST.NEXTRECORDSET()
USERTEL = MYRST(0)
USERMAIL = MYRST(1)
END IF
SET MYRST = NOTHING
以上代码中,利用RECORDSET对象的NEXTRECORDSET方法,取得了存储进程返回的多个记录集。
至此,针对ASP调用存储进程的各种情况,本文已做了较为全面的说明。最后说一下在一个ASP程序中,调用多个存储进程的不同方法。