首页 新闻 搜索 专区 学院

分页存储过程

0
悬赏园豆:10 [已解决问题] 解决于 2013-12-04 13:45

存储过程如下:

运行结果不是翻页,如第一页显示:

第二页显示:

是这样显示的,,麻烦各位高手给看看 是怎么回事 谢谢

问题补充:

用的是AspNetPager控件

wode301的主页 wode301 | 初学一级 | 园豆:5
提问于:2013-12-04 11:50
< >
分享
最佳答案
0
--第一种 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 就行,如有不了解,在发消息给我

收获园豆:6
秋壶冰月 | 大侠五级 |园豆:5692 | 2013-12-04 12:32

用row_number,提示:'row_number' 不是可以识别的 函数名。

wode301 | 园豆:5 (初学一级) | 2013-12-04 12:55

@wode301:1.如果你用的是sqlserver的话,那就是sqlserver2005之前的版本,可用第一种和第二种进行分页

2.mysql的话,就 limit

秋壶冰月 | 园豆:5692 (大侠五级) | 2013-12-04 13:00

还有就是我上面的那个存储过程有啥错误呢,为什么它不分页显示呢?谢谢

wode301 | 园豆:5 (初学一级) | 2013-12-04 13:00

@秋壶冰月: 谢谢

wode301 | 园豆:5 (初学一级) | 2013-12-04 13:05

@wode301: 你上面的写有问题,如果id不是连续的,假如你默认页大小为50条,就只会小于50条,而不会等于50条,

秋壶冰月 | 园豆:5692 (大侠五级) | 2013-12-04 13:11

@秋壶冰月: id肯定是不连续的了 ,是根据ABC的这个条件来查询的,现在的问题是在测试这个存储过程的时候,他不是翻页显示的,是往后加的如:exec BrandAspNetPager1 ‘A’, 1,3 显示的是第二个图的结果;

exec BrandAspNetPager1 ‘A’, 2,3显示的是第三个图的结果,它应该显示上的是序列号为:4,5,6,的结果,应该没有上面那三条才对的

wode301 | 园豆:5 (初学一级) | 2013-12-04 13:24

@秋壶冰月: 谢谢你,找到问题所在了,条件有点不太对,谢谢

wode301 | 园豆:5 (初学一级) | 2013-12-04 13:44
其他回答(1)
0
/********************************************************************************* 
*过程名称 : 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

给你一个例子

收获园豆:4
junjieok | 园豆:779 (小虾三级) | 2013-12-04 13:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册