日期:2014-05-20  浏览次数:20840 次

数据库分页

declare @PageSize int,@PageIndex int,@tmpSql nvarchar(2048)
select @PageSize=10,@PageIndex=3
set @tmpSql='select top '+cast(@PageSize as nvarchar(20))+'* from tbl_表名
where d_id>(select max(d_id) from (
select top '+convert(nvarchar(20),(@pagesize-1)*@pagesize)+'d_id from tbl_表名 order by d_id
)as t
order by d_id'
print(@tmpSql)
declare @BeginTime datetime,@EndTime datetime
set @BeginTime=getdate()
print('Begin Time:'+cast(@BeginTime as nvarchar(20)))
EXEC(@tmpSql)
set @EndTime=getdate()
print('End Time:'+cast(@EndTime as nvarchar(20)))
print('Use Time;'+cast(datediff(ms,@BeginTime,@EndTime) as nvarchar(20)))

我想问一下,就是当那个@PageIndex=1的时候就显示不出来,就是第一页显示不出来,其它时候都显示的出来
请帮忙解决一下,谢谢!!


------解决方案--------------------
print(@tmpSql)
看看SQL语句
if @page = 1 
set @intCounts = @pageSize
else
begin
set @intCounts = (@page-1) * @pageSize + 1
end

------解决方案--------------------

 
create proc proc_pagination   --创建分页存储过程   
 @page int = 1,                  -- 页数   
 @pagesize int = 10,             -- 每页的大小   
 @tableName varchar(100),        -- 要查询的表名   
 @orderFields varchar(255),      -- 排序的字段名(一定要)   
 @GetFields varchar(1000) = '*', -- 需要返回的列   
 @sqlWhere  varchar(1500) = '',  -- 查询条件(注意: 不要加where,但要加and)   
 @OrderType varchar(4) = 'desc', -- 设置排序类型   
 @totalrow int output,    --查询出多少条数据(输出参数)   
 @totalpage int output    --总有多少页(输出参数)   
as  
declare @sql varchar(2000),@sumRowSql nvarchar(2000),@ParmDefinition nvarchar(200);   
  
set @sumRowSql = N'select @totalRow = count(1) from ' + @tableName + ' where 1 = 1 '+@sqlWhere;  --查询的SQL语句   
set @ParmDefinition = N'@totalRow int output';   --定义查询SQL语句的参数类型