也谈存储过程分页

 最近我测试小春写的存储分页,发现有些许问题:
 建立一个test(id,name,fid)
 向test添充几十条数据,使id=1,2,3,4.........(即递增的integer),其他任意
 在T-sql Debugger给改存储过程分别传递如下参数:
    @queryStr= * from test
    @keyField=[ID]     
    @pageSize=3            
    @pageNumber=1
 问题出来了,看输出结果(注意id):
 id        name          fid
 4         kwklover       2
 5         kwklover       2
 6         kwklover       2
 根据传入参数,我们的预期应该是:
 id        name          fid
 1         kwklover       2
 2         kwklover       2
 3         kwklover       2

 下面是我参照小春存储分页写的分页存储过程,可以解决上面的问题:
CREATE Procedure prGetRecordByPage
(
   @PageSize int,   --每页的记录条数 
   @PageNumber int, --当前页面
   @QuerySql varchar(1000),--部分查询字符串,如* From Test order by id desc
   @KeyField varchar(500) 
)
AS
Begin

 Declare @SqlTable AS varchar(1000)
 Declare @SqlText AS Varchar(1000)

 Set @SqlTable='Select Top '+CAST(@PageNumber*@PageSize AS varchar(30))+' '+@QuerySql
 Set @SqlText='Select Top '+Cast(@PageSize AS varchar(30))+' * From '
        +'(
'+@SqlTable+') As TembTbA '
        +'Where
'+@KeyField+' Not In (Select Top '+CAST((@PageNumber-1)*@PageSize AS varchar(30))+' '+@KeyField+' From '
        +'(
'+@SqlTable+') AS TempTbB)'
 Exec(@SqlText)

End
GO

至于效率如何,呵呵,我也不知道,
因为我还不知道怎么测试存储过程的运行效率,希望各位朋友不吝赐教!先行谢过了

posted @ 2004-05-05 01:04  kwklover  阅读(4061)  评论(1编辑  收藏  举报