asp 同时返回参数和记录集的存储过程

同时返回参数和记录集的存储进程
有时候,我们需要存储进程同时返回参数和记录集,比如在利用存储进程分页时,要同时返回记录集以及数据总量等参数。以下给出一个进行分页处理的存储进程:

/*SP6*/
CREATE PROCEDURE DBO.GETUSERLIST
@IPAGECOUNT INT OUTPUT, --总页数
@IPAGE INT, --当前页号
@IPAGESIZE INT --每页记录数
AS
SET NOCOUNT ON
BEGIN
--创建临时表
CREATE TABLE #T (ID INT IDENTITY, --自增字段
USERID INT,
USERNAME VARCHAR(40))
--向临时表中写入数据
INSERT INTO #T
SELECT USERID,USERNAME FROM DBO.[USERINFO]
ORDER BY USERID
--取得记录总数
DECLARE @IRECORDCOUNT INT
SET @IRECORDCOUNT = @@ROWCOUNT

--确定总页数
IF @IRECORDCOUNT%@IPAGESIZE=0
SET @IPAGECOUNT=CEILING(@IRECORDCOUNT/@IPAGESIZE)
ELSE
SET @IPAGECOUNT=CEILING(@IRECORDCOUNT/@IPAGESIZE)+1
--若请求的页号大于总页数,则显示最后一页
IF @IPAGE > @IPAGECOUNT
SELECT @IPAGE = @IPAGECOUNT

--确定当前页的始末记录
DECLARE @ISTART INT --START RECORD
DECLARE @IEND INT --END RECORD
SELECT @ISTART = (@IPAGE - 1) * @IPAGESIZE
SELECT @IEND = @ISTART + @IPAGESIZE + 1

--取当前页记录
SELECT * FROM #T WHERE ID>@ISTART AND ID<@IEND

--删除临时表
DROP TABLE #T

--返回记录总数
RETURN @IRECORDCOUNT
END
GO

在上面的存储进程中,输入当前页号及每页记录数,返回当前页的记录集,总页数及记录总数。为了更具典型性,将记录总数以返回值的形式返回。以下是调用该存储进程的ASP代码(具体的分页操作略去):

'**调用分页存储进程**
DIM PAGENOW,PAGESIZE,PAGECOUNT,RECORDCOUNT
DIM MYCOMM,MYRST
PAGENOW = REQUEST("PN")
'自定义函数用于验证自然数
IF CHECKNAR(PAGENOW) = FALSE THEN PAGENOW = 1
PAGESIZE = 20
SET MYCOMM = SERVER.CREATEOBJECT("ADODB.COMMAND")
WITH MYCOMM
.ACTIVECONNECTION = MYCONSTR 'MYCONSTR是数据库连接字串
.COMMANDTEXT = "GETUSERLIST" '指定存储进程名
.COMMANDTYPE = 4 '表明这是一个存储进程
.PREPARED = TRUE '要求将SQL命令先行编译
'返回值(记录总量)
.PARAMETERS.APPEND .CREATEPARAMETER("RETURN",2,4)
'出参(总页数)
.PARAMETERS.APPEND .CREATEPARAMETER("@IPAGECOUNT",3,2)
'入参(当前页号)
.PARAMETERS.APPEND .CREATEPARAMETER("@IPAGE",3,1,4,PAGENOW)
'入参(每页记录数)
.PARAMETERS.APPEND .CREATEPARAMETER("@IPAGESIZE",3,1,4,PAGESIZE)
SET MYRST = .EXECUTE
END WITH
IF MYRST.STATE = 0 THEN '未取到数据,MYRST关闭
RECORDCOUNT = -1
ELSE
MYRST.CLOSE '注意:若要取得参数值,需先关闭记录集对象
RECORDCOUNT = MYCOMM(0)
PAGECOUNT = MYCOMM(1)
IF CINT(PAGENOW)>=CINT(PAGECOUNT) THEN PAGENOW=PAGECOUNT
END IF
SET MYCOMM = NOTHING

'以下显示记录
IF RECORDCOUNT = 0 THEN
RESPONSE.WRITE "无记录"
ELSEIF RECORDCOUNT > 0 THEN
MYRST.OPEN
DO UNTIL MYRST.EOF
......
LOOP
'以下显示分页信息
......
ELSE 'RECORDCOUNT=-1
RESPONSE.WRITE "参数错误"
END IF

对于以上代码,只有一点需要说明:同时返回记录集和参数时,若要取得参数,需先将记录集关闭,使用记录集时再将其打开。

 

时间: 2024-10-26 03:53:44

asp 同时返回参数和记录集的存储过程的相关文章

返回多个记录集的存储过程-ASP调用存储过程

存储过程|记录集 本文最先介绍的是返回记录集的存储过程.有时候,需要一个存储过程返回多个记录集,在ASP中,如何同时取得这些记录集呢?为了说明这一问题,在userinfo表中增加两个字段:usertel及usermail,并设定只有登录用户可以查看这两项内容. /*SP7*/CREATE PROCEDURE dbo.getUserInfo@userid int,@checklogin bitasset nocount onbeginif @userid is null or @checklogi

asp 返回多个记录集的存储过程

返回多个记录集的存储进程 本文最先介绍的是返回记录集的存储进程.有时候,需要一个存储进程返回多个记录集,在ASP中,如何同时取得这些记录集呢?为了说明这一问题,在USERINFO表中增加两个字段:USERTEL及USERMAIL,并设定只有登录用户可以查看这两项内容. /*SP7*/ CREATE PROCEDURE DBO.GETUSERINFO @USERID INT, @CHECKLOGIN BIT AS SET NOCOUNT ON BEGIN IF @USERID IS NULL OR

ASP调用带输入参数值及返回临时表记录集的存储过程

存储过程|记录集|临时表 存储过程编写注意事项:1.首先带有输入值,那么必须在存储过程声明一个输入值变量,如下代码: 以下是存储过程代码片段:ALTER  PROCEDURE 存储过程名 @year int '这行是定义输入的变量名 AS 2.由于是返回表,在存储过程开始AS部分部分必须加入set nocount on语句,如下代码: 以下是存储过程代码片段:ALTER  PROCEDURE HD_CK_XSHZ  @year int  AS set nocount on '调用临时表必须有些语

ASP中几种打开记录集方式的比较

比较|记录集 先定义conn.asp<% dim objConn dim strConn strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & chr(34) & Server.MapPath("data.mdb") & chr(34)  set objConn = server.createobject("adodb.connection") obj

带返回记录集的存储过程-ASP调用存储过程

存储过程|记录集 假设有以下存储过程(本文的目的不在于讲述T-SQL语法,所以存储过程只给出代码,不作说明): /*SP1*/CREATE PROCEDURE dbo.getUserListasset nocount onbeginselect * from dbo.[userinfo]endgo 以上存储过程取得userinfo表中的所有记录,返回一个记录集.通过command对象调用该存储过程的ASP代码如下: '**通过Command对象调用存储过程**DIM MyComm,MyRstSe

ADO 调用存储过程返回多个记录集的问题(关于存储过程内Set NoCount On的作用)

  最近在 CSDN 上回答了好几个网友大致相同的问题 http://community.csdn.net/Expert/TopicView.asp?id=4131244 http://community.csdn.net/Expert/TopicView.asp?id=4156955 大致都是问:为什么没有返回数据集或将记录集赋给表格控件出错 产生问题的原因大致有几个 1.不清楚 ADO.Connection.Execute 的返回机制,所有使用该方法返回的记录集都是只读,仅向前游标的 所以赋

在ASP中使用断开的记录集

断开|记录集|记录集 我们在使用ASP 内置的ADO组件进行数据库编程时,通常是在脚本的开头打开一个连接,并在脚本的最后关闭它,但是就较大脚本而言,在多数情况下连接打开的时间要比它需要打开的时间长得多.因此为了节省服务器资源,应该尽可能关闭连接以释放连接所占有的资源,这种关闭记录集的连接而不关闭记录集的技术叫做断开记录集,这个记录集本身则称为断开的记录集. 下面我们就通过一个实例来说明这种技术的使用方法(NorthWind.mdb是Microsoft Access自带的一个数据库,文件adovb

Hibernate执行返回多个结果集的存储过程怎么接收????

问题描述 我在sqlserver2008数据库里创建pageSelect存储过程createprocedurepageSelect@sqlstrnvarchar(4000),--查询字符串@currentpageint,--第N页@pagesizeint--每页行数assetnocountondeclare@P1int,--P1是游标的id@rowcountintexecsp_cursoropen@P1output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=

ASP 游标参数详解(ASP记录集)第1/2页_应用技巧

rs.open sql,conn,A,B A: ADOPenforwardonly (=0) 只读,且当前数据记录只能向下移动. ADOPenkeyset (=1) 只读,当前数据记录可自由移动. ADOpendynamic (=2) 可读写,当前数据记录可自由移动. ADOpenstatic (=3) 可读写,当前数据记录可自由移动,可看到新增记录. B: ADLockreadonly (=1) 缺省锁定类型,记录集是只读的,不能修改记录. ADLockpessimistic (=2) 悲观锁