使用SQL2000存储过程进行个性化分页

网上说这个得很多,但是哪些真正能用?哪些代码一经拷贝就无错误提示运行?
最近做了一个项目,把自己的存储过程分页贴出来和大家共享。
注意:有些地方需要1行写下来,我这里没有使用换行符,只有提示:

--大连理工大学计算机控制研究所电信新楼414房间
--2005-7-26
--分页逻辑:
--1、选出前面N页的所有记录,使用select top 页码乘以每页记录数,按升序或降序排列;
--2、选出前面页记录中的最后一个记录的排序字段值,使用 select top 1,注意排序规则就好;
--3、选出当前显示页的记录,使用select top 每页记录数 where 排序字段值 大于 上一步中得到的那个值;

CREATE PROCEDURE sp_Pagination
@v_TableName nvarchar(2000),    --要查询的表
@v_SelectField nvarchar(2000),     --要选取的字段
@v_Page int,                                --要显示的页码
@v_RecordNumPerPage int,        --每页显示的记录数
@v_StringWhere nvarchar(2000),  --条件语句
@v_OrderField nvarchar(2000),      --排序字段
@v_OrderType bit                         --0为升序,1为降序
AS

declare @str_SQL0 nvarchar(2000)
declare @str_SQL1 nvarchar(2000)

--开始实现选取当前页记录,如果当前页是第一页,可加快速度显示
if @v_Page=1
 begin
  if @v_StringWhere="empty"
   begin
    if @v_OrderType=0 --升序

     set @str_SQL0="select top " + str(@v_RecordNumPerPage) + @v_SelectField + " from " + @v_TableName + " " + @v_StringWhere + " order by " + @v_OrderField  
--上面两行要一行写下来!!!

    else

     set @str_SQL0="select top " + str(@v_RecordNumPerPage) + @v_SelectField + " from " + @v_TableName + " " + @v_StringWhere + " order by " + @v_OrderField + " DESC"
--上面两行要一行写下来!!!

   end
  else
   begin
    if @v_OrderType=0 --升序

     set @str_SQL0="select top " + str(@v_RecordNumPerPage) + @v_SelectField + " from " + @v_TableName + " " + @v_StringWhere + " order by " + @v_OrderField
--上面两行要一行写下来!!!
  
    else

     set @str_SQL0="select top " + str(@v_RecordNumPerPage) + @v_SelectField + " from " + @v_TableName + " " + @v_StringWhere + " order by " + @v_OrderField + " DESC"
--上面两行要一行写下来!!!
 
   end  
  exec(@str_SQL0)
 end
else
 begin
  if @v_StringWhere="empty"
   begin
    if @v_OrderType=0 --升序 

     set @str_SQL1="select top " + str(@v_RecordNumPerPage) + " " + @v_SelectField + " from " + @v_TableName + " where " + @v_OrderField + " > (select top 1 " + @v_OrderField + " from (" + "select top " + str((@v_Page-1)*@v_RecordNumPerPage) + " "  + @v_OrderField + " from " + @v_TableName + " order by " + @v_OrderField + " ) as Temp order by " + @v_OrderField + " DESC)"  
--上面五行要一行写下来!!!

    else

     set @str_SQL1="select top " + str(@v_RecordNumPerPage) + " " + @v_SelectField + " from " + @v_TableName + " where " + @v_OrderField + " < (select top 1 " + @v_OrderField + " from (" + "select top " + str((@v_Page-1)*@v_RecordNumPerPage) + " "  + @v_OrderField + " from " + @v_TableName + " order by " + @v_OrderField + " DESC) as Temp order by " + @v_OrderField + ") order by " + @v_OrderField + " DESC"
--上面五行要一行写下来!!!

   end
  else
   begin
    if @v_OrderType=0 --升序 

     set @str_SQL1="select top " + str(@v_RecordNumPerPage) + " " + @v_SelectField + " from " + @v_TableName + " " + @v_StringWhere + " and " + @v_OrderField + " > (select top 1 " + @v_OrderField + " from (" + "select top " + str((@v_Page-1)*@v_RecordNumPerPage) + " "  + @v_OrderField + " from " + @v_TableName + " " + @v_StringWhere + " order by " + @v_OrderField + " ) as Temp order by " + @v_OrderField + " DESC)"  
--上面六行要一行写下来!!!

    else

     set @str_SQL1="select top " + str(@v_RecordNumPerPage) + " " + @v_SelectField + " from " + @v_TableName + " " + @v_StringWhere + " and " + @v_OrderField + " < (select top 1 " + @v_OrderField + " from (" + "select top " + str((@v_Page-1)*@v_RecordNumPerPage) + " "  + @v_OrderField + " from " + @v_TableName + " " + @v_StringWhere + " order by " + @v_OrderField + " DESC) as Temp order by " + @v_OrderField + ") order by " + @v_OrderField + " DESC"
--上面六行要一行写下来!!!

   end
  exec(@str_SQL1)
 end
GO

如果您拷贝后建立存储过程时出现一堆错误,不要紧张,按Enter后将最后一行的GO的下面那个换行去掉,BackSpace一下就行了,GO后面最好没有任何字符,包括换行和空格。

posted on 2005-09-19 09:34  扎悉的乐  阅读(366)  评论(0)    收藏  举报

导航