shanghaipc 发表于 2016-11-12 06:08:24

MS-SQL 分页函数+ASP

  共需要两个存储过程,第一个是负责分页的

[*]CREATEPROCEDURE.
[*](
[*]@pageIndexint=1--当前页码0表示返回所有符合内容
[*],@pageSizeint=10--页尺寸
[*],@SIDnvarchar(30)=''--主键字段
[*],@strGetFieldnvarchar(1000)='*'--需要返回的列
[*],@strTableNamenvarchar(30)=''--表名
[*],@strWherenvarchar(2000)=''--查询条件(注意:条件中要带where)
[*],@strOrderBynvarchar(300)=''--排序
[*]--,@MemberIDint=0--会员ID
[*])
[*]AS
[*]SETNOCOUNTON
[*]
[*]DECLARE@strSQLnvarchar(4000)
[*]DECLARE@startPosint
[*]DECLARE@endPosint
[*]
[*]DECLARE@numint
[*]
[*]SET@startPos=@pageSize*(@pageIndex-1)+1
[*]SET@endPos=@startPos+@pageSize-1
[*]
[*]--页大小*(页数-1)
[*]SET@num=@pageSize*(@PageIndex-1)
[*]
[*]IF@PageIndex!=0
[*]BEGIN
[*]IF@strWhere!=''
[*]SET@strSQL='SELECTTOP'+cast(@pageSizeasnvarchar(10))+''+@strGetField+'FROM'+@strTableName+'WHERE('+cast(@SIDasnvarchar(30))+'NOTIN(SELECTTOP'+cast(@numasnvarchar(20))+''+cast(@SIDasnvarchar(30))+'FROM'+@strTableName+'where'+@strWhere+'ORDERBY'+cast(@strOrderByasnvarchar(255))+'))and'+@strwhere+'ORDERBY'+cast(@strOrderByasvarchar(255))+''
[*]else
[*]SET@strSQL='SELECTTOP'+cast(@pageSizeasnvarchar(10))+''+@strGetField+'FROM'+@strTableName+'WHERE('+cast(@SIDasnvarchar(30))+'NOTIN(SELECTTOP'+cast(@numasnvarchar(20))+''+cast(@SIDasnvarchar(30))+'FROM'+@strTableName+'ORDERBY'+cast(@strOrderByasnvarchar(255))+'))ORDERBY'+cast(@strOrderByasvarchar(255))+''
[*]--SET@strSQL='SELECTTOP页大小*FROMUsersWHERE(IDNOTIN(SELECTTOP(页大小*(当前页-1))IDFROMUsersORDERBYIDDESC))ORDERBYIDDESC'
[*]END
[*]ELSE
[*]BEGIN
[*]IF@strWhere!=''
[*]SET@strSQL='select'+@strGetField+'from'+@strTableName+'where'+@strWhere+'orderby'+@strOrderBy
[*]ELSE
[*]SET@strSQL='select'+@strGetField+'from'+@strTableName+'orderby'+@strOrderBy
[*]END
[*]--print(@strSQL)
[*]EXEC(@strSQL)
[*]GO


第二个存储过程


[*]CREATEPROCEDURE.
[*](
[*]@strTableNamenvarchar(30)='',
[*]@strWherenvarchar(2000)=''--查询条件(注意:条件中要带where)
[*])
[*]AS
[*]SETNOCOUNTOFF
[*]
[*]DECLARE@strSQLnvarchar(2500)
[*]
[*]IF@strWhere!=''
[*]SET@strSQL='selectcount(*)asTotalfrom['+@strTableName+']where'+@strWhere
[*]ELSE
[*]SET@strSQL='selectcount(*)asTotalfrom['+@strTableName+']'
[*]
[*]EXEC(@strSQL)
[*]GO


下面是调用这个存储过程的两个函数。可以放到一个包含文件里
,注意,下面的函数里面使用的一些变量,是全局的变量,不是参数传入的,所以需要在调用函数钱,给全局变量赋值。


[*]<%
[*]'取记录总数存储过程
[*]publicfunctiongetDataRowCount(strTableName,strWhere)
[*]dimmaxCount
[*]dimmyobj
[*]dimrsCount
[*]maxCount=0
[*]Setmyobj=Server.CreateObject("ADODB.Command")
[*]withmyobj
[*].ActiveConnection=conn
[*].CommandText="USP_GetTotal"
[*].CommandType=4
[*].Prepared=true
[*].Parameters.append.CreateParameter("@strTableName",200,1,30,strTableName)
[*].Parameters.append.CreateParameter("@strWhere",200,1,2000,strWhere)
[*]SetrsCount=.Execute
[*]endwith
[*]Setmyobj=Nothing
[*]maxCount=rsCount("Total")
[*]rsCount.close:SetrsCount=Nothing
[*]getDataRowCount=maxCount
[*]endfunction
[*]
[*]
[*]
[*]'单表分页存储过程
[*]subgetDataRS()
[*]dimobj
[*]Setobj=Server.CreateObject("ADODB.Command")
[*]withobj
[*].ActiveConnection=conn
[*].CommandText="USP_GetList"
[*].CommandType=4
[*].Prepared=true
[*].Parameters.append.CreateParameter("@pageIndex",3,1,4,iPageIndex)
[*].Parameters.append.CreateParameter("@pageSize",3,1,4,iPageSize)
[*].Parameters.append.CreateParameter("@SID",200,1,30,SID)'2000
[*].Parameters.append.CreateParameter("@strGetField",200,1,1000,strGetField)
[*].Parameters.append.CreateParameter("@tableName",200,1,30,strTableName)
[*].Parameters.append.CreateParameter("@strWhere",200,1,2000,strWhere)
[*].Parameters.append.CreateParameter("@strOrderBy",200,1,300,strOrderBy)
[*]Setrstobj=.Execute
[*]endwith
[*]Setobj=Nothing
[*]endsub
[*]
[*]
[*]%>



下面是调用这组分页存储过程的实例



[*]'#############定义分页存储过程所要使用的变量##################################################
[*]'1.定义变量,给部分变量设定初始值
[*]dimiPageIndex,iPageSize,iRowCount
[*]dimstrWherem,strTableName,SID,strGetField,strWhere,strOrderBy
[*]iPageSize=12'一页内显示的记录条数
[*]strTableName="dataTable"'表名
[*]SID="id"'主键名
[*]strGetField="id, field1,field2,field3"
[*]'要显示的字段名
[*]strWhere="where1=1 and where2=2"
[*]'where子句
[*]strOrderBy="iddesc"'排序
[*]
[*]'2,执行getPageInf()得到(1)iPageIndex:当前页数,(2)iRowCount:总记录数,(3)iPageCount:总页数
[*]CallgetPageInfo()'include_gb/page.asp
[*]
[*]'3,先定义rsTobj,再执行getDataRS().subgetDataRS()使用上面定义的表明,字段,where,页数,总记录数语句等,去访问存储过程,并把结果付给rsTobj(集合)
[*]dimrsTobj
[*]CallgetDataRS()
[*]'4,rsTobj得到了返回数据,开始循环输出,写到过程里,方便调用
[*]subshowProducts()
[*]ifrsTobj.eofThen
[*]response.Write("暂时没有数据")
[*]else
[*]dowhilenotrsTobj.eof
[*]CallshowProdTable(rsTobj("id"),rsTobj("NewsName"),rsTobj("Pictures"),rsTobj("abstract"),rsTobj("AddTime"))
[*]rsTobj.moveNext
[*]loop
[*]endif
[*]CloseRS(rsTobj)'关闭链接include_gb/connSiteData.asp
[*]endsub
[*]'###############################################################
页: [1]
查看完整版本: MS-SQL 分页函数+ASP