存储过程如下:
运行结果不是翻页,如第一页显示:
第二页显示:
是这样显示的,,麻烦各位高手给看看 是怎么回事 谢谢
用的是AspNetPager控件
--第一种 not in --先查询一部分数据排序,排除在外;适合用与sql server 2000及更高版本 select top 10 * from Info where uId not in (select top 30 uId from Info order by uId)order by uId --第二种 先查出一部分数据 排序 用Max找出最大Id 然后将其Max(uId)最大排除在外;适合用与sql server 2000及更高版本 select top 10 * from Info where uId > ( select ISNULL(MAX(uId),0) from ( select top 30 uId from Info order by uId ) a ) order by uId --第三种 row_number --把所有的数据查询出来,进行重新编号,通过where条件进行筛选数据;适用于sql server2005及更高版本 select top 10 * from (select row_number() over (order by uId) as rowId,* from Info)t where rowId>30 --第四种 offset fetch --offset后参数 越过多少条 fetch next后参数 取多少条;适用于sql server2012(是专门分页的吗?) select * from Info order by uId offset (30)row fetch next 10 rows only
拷贝以前的写博客的分页方式,分页的思想,如第一种 就是跳过30条数据,取10条数据,你只要把30替换成pageIndex*pageSize 就行,如有不了解,在发消息给我
用row_number,提示:'row_number' 不是可以识别的 函数名。
@wode301:1.如果你用的是sqlserver的话,那就是sqlserver2005之前的版本,可用第一种和第二种进行分页
2.mysql的话,就 limit
还有就是我上面的那个存储过程有啥错误呢,为什么它不分页显示呢?谢谢
@秋壶冰月: 谢谢
@wode301: 你上面的写有问题,如果id不是连续的,假如你默认页大小为50条,就只会小于50条,而不会等于50条,
@秋壶冰月: id肯定是不连续的了 ,是根据ABC的这个条件来查询的,现在的问题是在测试这个存储过程的时候,他不是翻页显示的,是往后加的如:exec BrandAspNetPager1 ‘A’, 1,3 显示的是第二个图的结果;
exec BrandAspNetPager1 ‘A’, 2,3显示的是第三个图的结果,它应该显示上的是序列号为:4,5,6,的结果,应该没有上面那三条才对的
@秋壶冰月: 谢谢你,找到问题所在了,条件有点不太对,谢谢
/********************************************************************************* *过程名称 : uspGetAppealInfors *功能描述 : 获取多条中转公司信息 *输入参数 : @goodsBillCode VARCHAR(50), --投诉运单编号 @customer VARCHAR(50), --客户名称 @ifHandle VARCHAR(50), --是否处理 @pageIndex INT, --待读取的页索引 @pageSize INT, --每页显示的记录数 *输出参数 : @recordCount INT OUT --总记录数 *返 回 值 : 结果集 ***********************************************************************************/ CREATE PROCEDURE [dbo].[uspGetAppealInfors] @goodsBillCode VARCHAR(50), --投诉运单编号 @customer VARCHAR(50), --客户名称 @ifHandle VARCHAR(50), --是否处理 @pageIndex INT, --待读取的页索引 @pageSize INT, --每页显示的记录数 @recordCount INT OUT --总记录数 AS BEGIN DECLARE @sqlRC NVARCHAR(4000) --RecordCount SQL DECLARE @sqlRS NVARCHAR(4000) --ResultSet SQL SET @sqlRC = 'SELECT @recordCount = Count(*) FROM Customer_AppealInfor WHERE 1=1 ' IF @ifHandle <> '' BEGIN SET @sqlRC = @sqlRC + ' AND IfHandle=''' + @ifHandle + '''' END IF @goodsBillCode <> '' BEGIN SET @sqlRC = @sqlRC + ' AND GoodsBillCode LIKE ''%' + @goodsBillCode + '%''' END IF @customer <> '' BEGIN SET @sqlRC = @sqlRC + ' AND Customer LIKE ''%' + @customer + '%''' END EXEC sp_executesql @sqlRC, N'@recordCount INT OUTPUT', @recordCount OUTPUT SET @sqlRS = 'SELECT SerialNumber, PKID, Customer, GoodsBillCode, AppealContent, AppealDate, IfHandle, DealDate, DealResult, IfCallback, CallBackDate, DealPerson FROM ( SELECT PKID, Customer, GoodsBillCode, AppealContent, AppealDate, IfHandle, DealDate, DealResult, IfCallback, CallBackDate, DealPerson, ROW_NUMBER() OVER (ORDER BY PKID ASC) AS SerialNumber FROM Customer_AppealInfor WHERE 1=1 ' IF @ifHandle <> '' BEGIN SET @sqlRS = @sqlRS + ' AND IfHandle=''' + @ifHandle + '''' END IF @goodsBillCode <> '' BEGIN SET @sqlRS = @sqlRS + ' AND GoodsBillCode LIKE ''%' + @goodsBillCode + '%''' END IF @customer <> '' BEGIN SET @sqlRS = @sqlRS + ' AND Customer LIKE ''%' + @customer + '%''' END SET @sqlRS = @sqlRS + ') AS T WHERE T.SerialNumber > ' + CONVERT(NVARCHAR(100), (@pageIndex - 1) * @pageSize) + ' AND T.SerialNumber <= ' + CONVERT(NVARCHAR(100), @pageIndex * @PageSize) EXEC (@sqlRS) END
给你一个例子