存储过程分页问题
我用存储过程分页,但明明定义每页显示十条记录,可不知道为什么只显示九条。请问会是哪里的问题。
这是我用的存储过程:
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