MS-SQL 分页函数+ASP

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

  1. CREATEPROCEDURE[dbo].[USP_GetList]
  2. (
  3. @pageIndexint=1--当前页码0表示返回所有符合内容
  4. ,@pageSizeint=10--页尺寸
  5. ,@SIDnvarchar(30)=''--主键字段
  6. ,@strGetFieldnvarchar(1000)='*'--需要返回的列
  7. ,@strTableNamenvarchar(30)=''--表名
  8. ,@strWherenvarchar(2000)=''--查询条件(注意:条件中要带where)
  9. ,@strOrderBynvarchar(300)=''--排序
  10. --,@MemberIDint=0--会员ID
  11. )
  12. AS
  13. SETNOCOUNTON
  14. DECLARE@strSQLnvarchar(4000)
  15. DECLARE@startPosint
  16. DECLARE@endPosint
  17. DECLARE@numint
  18. SET@startPos=@pageSize*(@pageIndex-1)+1
  19. SET@endPos=@startPos+@pageSize-1
  20. --页大小*(页数-1)
  21. SET@num=@pageSize*(@PageIndex-1)
  22. IF@PageIndex!=0
  23. BEGIN
  24. IF@strWhere!=''
  25. 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))+''
  26. else
  27. 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))+''
  28. --SET@strSQL='SELECTTOP页大小*FROMUsersWHERE(IDNOTIN(SELECTTOP(页大小*(当前页-1))IDFROMUsersORDERBYIDDESC))ORDERBYIDDESC'
  29. END
  30. ELSE
  31. BEGIN
  32. IF@strWhere!=''
  33. SET@strSQL='select'+@strGetField+'from'+@strTableName+'where'+@strWhere+'orderby'+@strOrderBy
  34. ELSE
  35. SET@strSQL='select'+@strGetField+'from'+@strTableName+'orderby'+@strOrderBy
  36. END
  37. --print(@strSQL)
  38. EXEC(@strSQL)
  39. GO

第二个存储过程

  1. CREATEPROCEDURE[dbo].[USP_GetTotal]
  2. (
  3. @strTableNamenvarchar(30)='',
  4. @strWherenvarchar(2000)=''--查询条件(注意:条件中要带where)
  5. )
  6. AS
  7. SETNOCOUNTOFF
  8. DECLARE@strSQLnvarchar(2500)
  9. IF@strWhere!=''
  10. SET@strSQL='selectcount(*)asTotalfrom['+@strTableName+']where'+@strWhere
  11. ELSE
  12. SET@strSQL='selectcount(*)asTotalfrom['+@strTableName+']'
  13. EXEC(@strSQL)
  14. GO

下面是调用这个存储过程的两个函数。可以放到一个包含文件里

,注意,下面的函数里面使用的一些变量,是全局的变量,不是参数传入的,所以需要在调用函数钱,给全局变量赋值。

  1. <%
  2. '取记录总数存储过程
  3. publicfunctiongetDataRowCount(strTableName,strWhere)
  4. dimmaxCount
  5. dimmyobj
  6. dimrsCount
  7. maxCount=0
  8. Setmyobj=Server.CreateObject("ADODB.Command")
  9. withmyobj
  10. .ActiveConnection=conn
  11. .CommandText="USP_GetTotal"
  12. .CommandType=4
  13. .Prepared=true
  14. .Parameters.append.CreateParameter("@strTableName",200,1,30,strTableName)
  15. .Parameters.append.CreateParameter("@strWhere",200,1,2000,strWhere)
  16. SetrsCount=.Execute
  17. endwith
  18. Setmyobj=Nothing
  19. maxCount=rsCount("Total")
  20. rsCount.close:SetrsCount=Nothing
  21. getDataRowCount=maxCount
  22. endfunction
  23. '单表分页存储过程
  24. subgetDataRS()
  25. dimobj
  26. Setobj=Server.CreateObject("ADODB.Command")
  27. withobj
  28. .ActiveConnection=conn
  29. .CommandText="USP_GetList"
  30. .CommandType=4
  31. .Prepared=true
  32. .Parameters.append.CreateParameter("@pageIndex",3,1,4,iPageIndex)
  33. .Parameters.append.CreateParameter("@pageSize",3,1,4,iPageSize)
  34. .Parameters.append.CreateParameter("@SID",200,1,30,SID)'2000
  35. .Parameters.append.CreateParameter("@strGetField",200,1,1000,strGetField)
  36. .Parameters.append.CreateParameter("@tableName",200,1,30,strTableName)
  37. .Parameters.append.CreateParameter("@strWhere",200,1,2000,strWhere)
  38. .Parameters.append.CreateParameter("@strOrderBy",200,1,300,strOrderBy)
  39. Setrstobj=.Execute
  40. endwith
  41. Setobj=Nothing
  42. endsub
  43. %>

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

  1. '#############定义分页存储过程所要使用的变量##################################################
  2. '1.定义变量,给部分变量设定初始值
  3. dimiPageIndex,iPageSize,iRowCount
  4. dimstrWherem,strTableName,SID,strGetField,strWhere,strOrderBy
  5. iPageSize=12'一页内显示的记录条数
  6. strTableName="dataTable"'表名
  7. SID="id"'主键名
  8. strGetField="id, field1,field2,field3"
  9. '要显示的字段名
  10. strWhere="where1=1 and where2=2"
  11. 'where子句
  12. strOrderBy="iddesc"'排序
  13. '2,执行getPageInf()得到(1)iPageIndex:当前页数,(2)iRowCount:总记录数,(3)iPageCount:总页数
  14. CallgetPageInfo()'include_gb/page.asp
  15. '3,先定义rsTobj,再执行getDataRS().subgetDataRS()使用上面定义的表明,字段,where,页数,总记录数语句等,去访问存储过程,并把结果付给rsTobj(集合)
  16. dimrsTobj
  17. CallgetDataRS()
  18. '4,rsTobj得到了返回数据,开始循环输出,写到过程里,方便调用
  19. subshowProducts()
  20. ifrsTobj.eofThen
  21. response.Write("暂时没有数据")
  22. else
  23. dowhilenotrsTobj.eof
  24. CallshowProdTable(rsTobj("id"),rsTobj("NewsName"),rsTobj("Pictures"),rsTobj("abstract"),rsTobj("AddTime"))
  25. rsTobj.moveNext
  26. loop
  27. endif
  28. CloseRS(rsTobj)'关闭链接include_gb/connSiteData.asp
  29. endsub
  30. '###############################################################

你可能感兴趣的:(sql,SQL Server,asp,Go)