日期:2014-05-19  浏览次数:20372 次

存储过程分页问题
我用存储过程分页,但明明定义每页显示十条记录,可不知道为什么只显示九条。请问会是哪里的问题。
这是我用的存储过程:
ALTER   PROCEDURE   [dbo].[listpage]
@PK   varchar(50)= ' ',
@Fields   varchar(500),
@Tables   varchar(1000),
@Where   varchar(500)= ' ',
@OrderBy   varchar(100)= ' ',
@PageIndex   int,
@PageSize   int

AS
--替换单引号,避免构造SQL出错
set   @Fields   =   replace(@Fields,   ' ' ' ',   ' ' ' ' ' ')

--要执行的SQL,切分为几个字符串,避免出现长度超过4k时的问题

declare   @SQL1   varchar(4000)
declare   @SQL2   varchar(4000)

if   @PageIndex=0
set   @PageIndex   =   1

set   @SQL1   =   ' '
set   @SQL2   =   ' '
if   @Where   is   not   null   and   len(ltrim(rtrim(@Where)))   >   0
set   @Where   =   '   where   '   +   @Where
else
set   @Where   =   '   where   1=1 '

set   @SQL1   =   @SQL1   +   '   declare   @TotalCount   int '   --声明一个变量,总记录数
set   @SQL1   =   @SQL1   +   '   declare   @PageCount   int '   --声明一个变量,总页数
set   @SQL1   =   @SQL1   +   '   declare   @PageIndex   int '   --声明一个变量,页索引
set   @SQL1   =   @SQL1   +   '   declare   @StartRow   int '   --声明一个变量,当前页第一条记录的索引

set   @SQL1   =   @SQL1   +   '   select   @TotalCount=count(*)   from   '   +   @Tables   +   @Where   --获取总记录数
set   @SQL1   =   @SQL1   +   '   if   @PageCount   <=   0   begin '   --如果记录数为0,直接输出空的结果集
set   @SQL1   =   @SQL1   +   '   select   '   +   @Fields   +   '   from   '   +   @Tables   +   '   where   1 <> 1 '
set   @SQL1   =   @SQL1   +   '   select   0   as   PageIndex,0   as   PageCount, '  
+   convert(varchar,   @PageSize)   +   '   as   PageSize,0   as   TotalCount '
set   @SQL1   =   @SQL1   +   '   return   end '

set   @SQL1   =   @SQL1   +   '   set   @PageCount=(@TotalCount+ '   +   convert(varchar,   @PageSize)  
+   '-1)/ '   +   convert(varchar,   @PageSize)   --获取总页数
set   @SQL1   =   @SQL1   +   '   set   @PageIndex= '   +   convert(varchar,   @PageIndex)  
--设置正确的页索引
set   @SQL1   =   @SQL1   +   '   if   @PageIndex <0   set   @PageIndex=1 '
set   @SQL1   =   @SQL1   +   '   if   @PageIndex> @PageCount   and   @PageCount> 0  
set   @PageIndex=@PageCount '
set   @SQL1   =   @SQL1   +   '   set   @StartRow=(@PageIndex-1)* '   +   convert(varchar,   @PageSize)
+   '+1 '

if   (charindex( ', ',   @OrderBy)=0   and   charindex(@PK,   @OrderBy)> 0)
begin